跳到主要內容

Git取消合并 Undo a merge by pull request




前言

實務上在多人開發的情況下, 很常在上 Code 的時候被 Git 要求先做 PULL



但若是 PULL 下來的內容有問題,  特別是當同仁交付了一段會造成系統崩潰的內容至版本庫 (Repository) 時, PULL 下來的 Commit 就會使正在開發的功能受到影響, 若無法在短時間內修正, 嚴重的話甚至會影響到整個軟體專案的開發, 造成其他新功能都無法進行部屬


使用 Revert

git pull 做的事情就是 Fetch + merge, 所以事實上可以使用 git revert 把剛剛的 Merge Commit 打掉


找出要打掉的 Merge Commit Id



執行 Revert 指令
$ git revert -m 1

結果如下



使用 Reset

$ git reset --hard <MERGE 之前的 COMMIT_ID>
不建議用這個方法, 因為執行完上面的指令之後, 雖然 HEAD 會往前移動, 工作目錄會被還原到合併之前的 Commit, 但是在重新上 Code 時 Git 還是會要求做 PULL, 因為遠端分支的 HEAD 還是指在比較新的 Commit 上(有問題的  Commit)

除非強行覆蓋遠端版本庫中的內容, 如下
$  git push --force
但實務上並不是每個開發團隊都接受使用--force 的指令作強制覆蓋, 所以要取消 Merge Commit, 建議還是使用 Revert 指令

留言