2010-09-27 35 views
2

我試圖恢復錯誤的合併,但兩個命令的恢復更改看起來不正確。git恢復合併 - 主線看起來都不正確

這是我提出的合併提交:

# merge master into branch: 
git checkout branch 
git merge master 
# resolve conflicts 
git commit 
git push 

現在我想恢復與合併:

git log b2e 
    commit b2e... 
    Merge: de9... cf4... 
git revert -m 1 -n b2e 

的問題是,git status表明,它只會撤消衝突我解決了,而不是整個合併。 命令git revert -m 2 -n b2e將撤消在合併之前對分支所做的更改,我也不想這兩者。

第二個問題是: 如何顯示合併提交中更改的內容?

git show b2e  # only shows the conflicts I resolved 
git diff b2e de9 # does the same 
git diff b2e cf4 # shows what is different between the branch and master 

更新:de9提交了恢復到和git的差異B2E DE9沒有顯示什麼承諾是正確的。我感到困惑的一個原因是因爲刪除/保留衝突沒有顯示在diff中,所以我認爲git沒有顯示出我的變化。差異到cf4,承諾master,更讓我困惑,因爲我不太明白髮生了什麼。 有沒有必要回答這個問題。

回答

1

Git revert可能不是你想要做的。在合併之前,最簡單的方法是運行git reset --hard HEAD^(或者使用您想要移回的提交的SHA1,而不是HEAD^),尤其是如果您在自己工作,或者如果你還沒有推動你的合併和/或恢復。如果您使用revert恢復合併,則可能會遇到無法輕鬆重新合併您恢復的提交的情況,恢復本身會記錄爲新的提交,並且通常可能會很快導致混淆。在這裏看到的例子和策略:http://progit.org/2010/03/02/undoing-merges.html