Git 優雅的撤銷中間某次提交(包括 merge)

vinhson發表於2019-07-26

最近兩天,公司的git合併程式碼時,出現了嚴重的問題,浪費很多時間;
現在記錄下;
情況是這樣的,有一個 dev 測試分支,我們有自己額外的開發分支,在不知情的情況下有人執行了 merge dev 當釋出的時候才發現問題。模擬圖片:

git 優雅的撤銷中間某次提交(包括merge)

而此時版本庫已經提交過多次,現在的問題是如何將中間 merge dev 提交的程式碼撤銷,並保留之後別人提交的程式碼。

步驟 一

git revert 100047dcc
error: Commit 100047dccb58f3ee5e27b0dfaf5c02ac91dc2c73 is a merge but no -m option was given.
fatal: revert failed

結果報錯了,報了一個 Commit is a merge but no -m option was given. 為什麼呢?
如果 100047dcc 這只是一個普通的提交,其實是不會報錯的,但是,這是一個 merge 的提交。

git 優雅的撤銷中間某次提交(包括merge)

這個時候,怎麼辦呢?
我的做法

步驟 一

git revert 100047dcc -m 1

引數 -m 就是指定要撤銷的那個提價,從左往右,從1開始數;也就是我撤銷的是 0099aca7
接著其把程式碼衝突,然後我就解決衝突,保留主分支的程式碼,去掉那個人的程式碼。

git 優雅的撤銷中間某次提交(包括merge)

最後一步

git push

具體步驟:

1,首先git log檢視提交記錄,找到出錯的前一筆提交的commit_id

2,用命令git rebase -i commit_id ,查詢提交記錄

3,將出錯那筆提交的pick改為drop

4,Esc,:wq
1、git reset --hard 1d7444 #回退到出錯版本前一個commit

2、git cherry-pick 626335 #將某次commit的更改應用到當前版本(將出錯 cmmit 之後別人提交的程式碼合併到當前正常程式碼分支上)

3、git push origin HEAD --force  #強制提交
本作品採用《CC 協議》,轉載必須註明作者和本文連結
不要輕易放棄。學習成長的路上,我們長路漫漫,只因學無止境 Don't give up easily. On the way of learning and growing up, we have a long way to go, just because there is no end to learning.

相關文章