2017-06-19 83 views
0

問題是:我們想要合併topicmaster,但topicmaster的祖先,因此合併是無操作。 topicmaster之間的提交已將之前合併的topic恢復爲master。它使用reset而不是revert。現在,master..topic之間的diff顯示我們要應用的所有更改。我們如何應用這些變化?應用已合併然後恢復的更改

 C  B  A  D 
master * ---- * ---- * ---- * ---- * 
         \ 
         \ 
        topic * ---- * ---- * ---- * 
  • Amerge
  • B同時回覆了AD但未使用revert
  • C增加額外提交

編輯:

B恢復超過A,但我們希望的是A推出重新申請只有變化。因此,恢復B不會實現我們的目標,因爲它會恢復D

+0

只是'git的恢復B'。 –

+0

@OliverCharlesworth不幸的是,我沒有提到'B'退出了多於'topic'的合併。道歉。 –

+0

嗯,這意味着你提到的'master..topic'差異實際上是你希望改變的一個*超集*。 –

回答

3

有在一些選項:

  1. 可以恢復B和恢復D. 還原B就恢復d,所以你又恢復d。

  2. 如果差異顯示您想要應用的內容,則可以從差異創建補丁文件並將該補丁文件應用於主分支。

創建補丁:

git diff master..topic > file.patch 

去掌握和運用的補丁:

git apply file.patch 
+0

創建和應用補丁符合要求。 –

0

看:

Re-doing a reverted merge in Git

簡短的回答:恢復的復歸。但也有陷阱,你應該看看git的文檔

+0

當還原不是「還原」時,這是否可行? –

+0

是的,使用git log來查找您執行重置的ref,恢復ref,並且它是同樣的事情。 –

+0

我的歉意。我已經更新了我的答案,因爲我忽略了一個重要細節。 –