方法一,reset 到 merge 前的版本,然后再重做接下來的操作,要求每個合作者都曉得怎么將本地的 HEAD 都回滾回去:
$ git checkout 【行merge操作時所在的分支】
$ git reset --hard 【merge前的版本號】
方法二,當 merge 以后還有別的操作和改動時,git 正好也有辦法能撤銷 merge,用 git revert:
$ git revert -m 【要撤銷的那條merge線的編號,從1開始計算(怎么看哪條線是幾啊?)】 【merge前的版本號】
Finished one revert.
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'"
1 files changed, 0 insertions(+), 2 deletions(-)
這樣會創建新的 commit 來抵消對應的 merge 操作,而且以后 git merge 【那個編號所代表的分支】 會提示:
Already up-to-date.
因為使用方法二會讓 git 誤以為這個分支的東西都是咱們不想要的。
方法三,怎么撤銷方法二:
$ git revert 【方法二撤銷merge時提交的commit的版本號,這里是88edd6d】 Finished one revert. [master 268e243] Revert "Revert "Merge branch 'jk/post-checkout'"" 1 files changed, 2 insertions(+), 0 deletions(-)
這樣就行了,可以正常 merge 了,不過可能會有很多沖突:
$ git merge jk/post-checkout Auto-merging test.txt Merge made by recursive. test.txt | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)