2012-07-30 88 views
58
develop branch 
--> dashboard (working branch) 

我用git merge --no-ff develop合併任何上游變爲儀表板回滾一個Git合併

git的日誌:

commit 88113a64a21bf8a51409ee2a1321442fd08db705 
Merge: 981bc20 888a557 
Author: XXXX <> 
Date: Mon Jul 30 08:16:46 2012 -0500 

    Merge branch 'develop' into dashboard 

commit 888a5572428a372f15a52106b8d74ff910493f01 
Author: root <[email protected]> 
Date: Sun Jul 29 10:49:21 2012 -0500 

    fixed end date edit display to have leading 0 

commit 167ad941726c876349bfa445873bdcd475eb8cd8 
Author: XXXX <> 
Date: Sun Jul 29 09:13:24 2012 -0500 

合併有大約50 +提交在裏面,我想知道如何只是恢復合併,所以儀表板返回到合併前的狀態

這是第二部分,如果我沒有合併--no-ff,我沒有得到提交'合併分支'開發'到儀表板'..我將如何滾動合併回來?

+2

[撤消Git合併?](http://stackoverflow.com/q/2389361/456814)可能有重複。 – 2014-07-07 04:45:53

回答

118

還原合併提交了詳盡的覆蓋other questions.當你做一個快進合併,你描述的第二個,你可以使用git reset找回以前的狀態:

git reset --hard <commit_before_merge> 

你可以找到<commit_before_merge>git refloggit log,或者,如果你感覺MOXY(和沒有做過別的):git reset --hard [email protected]{1}

+4

感謝您的快速回復..看着git日誌,合併之前的提交是50+提交回來,因爲git合併開發實際上提交了所有其他提交。我想我沒有得到的是,如果我不知道什麼/在哪裏合併 - 我怎麼找到它?你提到找到commit_before_merge ..我想我不理解那部分 – cgmckeever 2012-07-30 13:42:30

+2

看起來像使用git reflog看起來像它總結了最好的頭很好,並讓我知道我需要重置到哪裏。 git日誌似乎有太多的粒度來查明重置位置。謝謝 – cgmckeever 2012-07-30 13:53:48

+0

是的,'reflog'是一個救生員。 'HEAD @ {1}'只是描述HEAD的第二個最新狀態,或者更具體地說:「後綴爲@的後綴@和括號中包含的序號規範(例如{1},{15})指定該參考的第n個先前值「。 – Christopher 2012-07-30 14:22:46

9

只需重置與git reset --hard HEAD^合併提交。

如果你使用--no-ff git總是創建一個合併,即使你之間沒有提交任何東西。如果沒有--no-ff git就會快速前進,這意味着你的分支HEAD將被設置爲合併分支的HEAD。要解決此問題,請查找要恢復的提交ID並git reset --hard $COMMITID

+0

如果您在合併之前不知道提交,那麼這是一個很好的解決方案。 – iglesiasedd 2017-01-26 22:07:37

2
git reset -m 1 88113a64a21bf8a51409ee2a1321442fd08db705 

但可能有unexp副作用。參見git-scm.com/docs/git-revert

- 基本父母號選項也許一個殘酷而有效的方法是檢出該提交的左側父項,複製所有文件,再次檢出HEAD,並將所有內容替換爲舊文件。然後git會告訴你什麼是回滾,你創建你自己的回覆提交:)!

+1

+1,因爲這個答案不會像重置一樣混淆歷史記錄(如果您已經推送到遠程,這一點非常重要)。但是我應該期待什麼樣的意想不到的副作用? – pedromanoel 2015-08-24 13:59:51

+0

這是你提到的副作用嗎? '恢復合併提交聲明你永遠不會想要合併引入的樹更改。因此,稍後的合併只會引入不是先前還原合併的祖先的提交引入的樹更改。這可能是也可能不是你想要的。「 – pedromanoel 2015-08-24 14:03:13

22

從這裏:

http://www.christianengvall.se/undo-pushed-merge-git/

git revert -m 1 <merge commit hash> 

混帳復歸增加了一個新的提交是回滾指定的提交。

使用-m 1告訴它,這是一個合併,我們想要回滾到master分支上的父提交。您將使用-m 2來指定開發分支。

+6

請注意,在此之後,您不能重新合併分支,如文檔所述:」恢復合併提交聲明,您將永遠不希望合併中引入的樹更改。結果,後來的合併只會引入由不是先前還原合併的祖先提交引入的樹更改,這可能是也可能不是你想要的。「 – 2015-11-12 09:44:27

+1

@DaliborKarlović這句話有點苛刻。你以後肯定會帶回這些變化,訣竅是恢復恢復提交。更多信息[這裏](https://git-scm.com/blog/2010/03/02/undoing-merges.html)中的「恢復恢復」 – Hilikus 2016-11-01 18:15:06