首先,我必須道歉 - 這裏有很多'如何撤消合併'的問題,但我對git非常陌生,以至於我真的不明白如何適應他們的解決方案我的情況(儘管我相信他們可以)。git撤消推送合併恢復單獨的分支
我有兩個分支,versionA
和versionB
。我在versionA
中做了一些更改,並將它們合併爲versionB
,這很好,因爲versionA
中所做的更改是向前兼容的。然後,我想我一定是不小心合併了versionB
回versionA
,這是不好的,因爲versionB
是不是向後兼容到versionA
。
我該如何解決這個問題?
爲了讓事情更清晰,這是我做了什麼:
versionA C--C--C--C'--M2
\ /
\ /
versionB C--M--C--C*
M: merged versionA into versionB. this is fine.
M2: accidentally merged versionB back into versionA
這就是我想要的:
versionA C--C--C--C'
\
\
versionB C--M--C--C*
如果我是在水銀我會做hg rollback
和所有會沒關係,或者我會hg update C'
,併爲versionA
分支做出未來提交,儘管這會使M2
成爲一個死角(因此我更喜歡rollback
方法)。
什麼是git方式來清理最後提交M2
從versionA
分支? (所有更改都已推送)。
謝謝!我能請求一些進一步的解釋嗎?第一個選項我的歷史將會是什麼樣子? 'M2'是一個搖搖晃晃的頭,並且進一步承諾'versionA'全部脫離'C''? (也就是說,我的'versionA'歷史看起來像是一條連續的線,有一條(死的)葉子'M2'掛在它上面?)另外,你能解釋'git reset HEAD^--hard'嗎?我看看'git help reset',但它並不能解釋'HEAD'後面的'^'是什麼意思(儘管它在示例中使用了它)。我猜它意味着「頭部之前的提交」? – 2012-07-20 01:14:21
最後,如果我做第二個版本(清理歷史),如果其他人已經將「M2」拉入其歷史記錄,會發生什麼?同樣,如果未來的人拉動存儲庫,他們會看到「M2」嗎? – 2012-07-20 01:15:15
要回答第一個問題 - 我在'git help revisions'中找到了HEAD ^'的解釋。並且基於'git help revert',我認爲我的新'versionA'歷史將是'C - C - C - C' - M2 - M2'',其中'M2'表示「恢復了M2" 。其他問題(將'HEAD^--hard'重新設置爲已經對已經簽出'M2'的任何人進行了重新設置)仍然存在。 – 2012-07-20 01:23:25