2013-01-15 45 views
2

混帳合併支行的歷史如下:正確還原致力於爲原點

enter image description here

現在我想恢復與分支558.我有它的SHA代碼合併,所以我做:

git revert -m 1 1784adf300f43fb76391e92f80be01132eddb680

,其結果是:

[master d51e2b3] Revert "Merge branch '558'" 1 files changed, 15 insertions(+), 29 deletions(-)

在這個時候,當我嘗試將我的恢復推回到原點時,我發現只有合併後的558分支的最後一次提交被恢復(以及在合併中超過1個文件受到影響)。我該如何恢復合併分支中的所有提交,或者我在這裏做了其他錯誤。

+0

重複 - [undo-last-git-commit](http://stackoverflow.com/questions/927358/undo-last-git-commit)? – kerim

+0

不是重複,因爲它涉及合併 –

回答

2

您可以使用git revert指定多個提交,提交間隔。在這裏,您需要從分支558中找到第一個提交,它與master分離,並在兩個分支合併之前提交。

然後,您可以使用:

git revert -n {first_commit}..{last_commit} 

這裏,-n選項允許不具備提交每個恢復提交,它只階段,該階段可以用適當的描述之後提交更改。

它應該工作,如果你的歷史很簡單,就像你的例子。

更正和澄清: git不會直接接受合併提交或包含歸併合併的間隔。然而,僅使用合併提交和選項-m i來恢復整個分支是可能的,其中i表示合併的哪一側要恢復(從1開始,因此這裏將是2)。

整個問題是非常微妙的,this document是一個有用的閱讀。

+0

但是,-m參數呢?現在我得到了:'MacBook- $ git revert -n first_commit merge_commit -m 1 fatal:指定了主線,但是提交first_commit不是合併。' –

+0

@mike_hornbeck對不起,我的研究有點sl。。我做了一個更正並添加了一些細節。 – lbonn

+0

是的,文檔也不是很清楚,因爲你應該做什麼,這是什麼 - 我真的這樣做。謝謝 ! –