我假設你不想做任何重定和重置,這是合併的方法。
假設您有兩個分支master
和feature
。 所以,你已經決定合併功能爲master
:
$ git merge feature
現在,你對主所有feature
變化。我假設最困難的情況 - 在兩個分支合併後提交。但是,突然你看到feature
沒有任何作用,一切都被打破,並決定恢復它。你的歷史就是(你可以看到它與git log --graph feature master
):
* commit 838f29fda2333bdbfc0d1be44d2387e6119dc4e8
|
| f3
|
| * commit 58d1e3f0e032cc77d4ab2bbf0bdfe6407b96b7e6
| |
| | m3
| |
| * commit afb600fe382befe095f9b8a6e9eef98be25c929b
| |\ Merge: 5cddc52 8660a59
| |/
|/|
| | Merge branch 'feature'
| |
* | commit 8660a59eeb13f9b3447846ba6977140f7c86c7a4
| |
| | f2
| |
* | commit 6f76e2288d69808b97981340198fd8044ab47630
| |
| | f1
| |
| * commit 5cddc528de424a01d1d18552ddea93435618e2f7
| |
| | m2
| |
| * commit fa6ebb76f9f0308f7dcd1148503534668fa15358
|/
|
| m1
|
* commit 4e3aa05d6f46eb14bbbc253a42325e9a53a3393e
通知的提交F3和M3已經合併後已經完成。因此,您需要仔細刪除中出現的僅來自feature
的更改。
要做到這一點,您可以在master
上恢復合併提交,並保留主基地(參數-m1
)。爲了實現它,我創建基於合併點的新分支,在其還原:
$ git checkout -b feature-revert afb600fe
$ git revert -m1 HEAD
現在,我們已經在分支feature-revert
上次取消的變化。現在,它是簡單的只是把它放到主通過合併:
$ git checkout master
$ git merge feature-revert
所以,此刻的master
沒有從任何feature
。但是,如果稍後想要重新合併該功能,則所有還原的更改都將在master中丟失,因爲它們已合併並被還原。
爲了解決這個問題,您應該恢復該還原(他 - 他),然後把它合併到feature
:
$ git checkout feature-revert
$ git revert HEAD
$ git checkout feature
$ git merge feature-revert
我想我們不需要分支了,因爲我們合併它了,但你可以繼續,如果你想:
$ git branch -d feature-revert
你應該知道,該合併回彙集了來自master
所有變更爲feature
通常正常的工作流程。
現在,在feature
中進行修復後,您可以像往常一樣隨時將其合併到master
中。
來源
2013-07-23 10:53:36
kan
這是您正在恢復的合併提交嗎?如果是這樣,看看http://stackoverflow.com/questions/1078146/re-doing-a-reverted-merge-in-git – jszakmeister
啊,我看到了問題,你正在合併主線到你的分支。我認爲我上面提供的鏈接可以幫你解決問題。你只需要在你的分支上「恢復回覆」。 – jszakmeister
ohh。好的,那裏提到的一些東西看起來很有幫助 –