2016-03-15 62 views

回答

8

挑選櫻桃之後,您始終可以執行rebase。所以它看起來像這樣:

git cherry-pick <hash> 
git rebase HEAD~2 -i 

交換rebase窗口中的提交訂單。

第二個選項

在你要解決衝突只有一次,你說的情況。你可以走很長的路。 刪除當前的提交,櫻桃選擇另一個,然後選擇最新的提交。

git log --oneline -1 
    <write_down_this_hash> description 
git reset --hard HEAD~1 
git cherry-pick <hash to cherry pick> 
git cherry-pick <write_down_this_hash> 
+0

問題是,櫻花後選擇,我進入「衝突解決」階段。我只想解決衝突一次,當櫻桃選擇的提交不在頂部(但在頂部正下方的正確位置)。 – nyarlathotep108

+0

我在答案中提供了第二個(更長)的選項。 –

+0

@ nyarlathotep108:你可能想考慮嘗試'git rerere'。 – Hasturkun

2

這是另一種方法。比方說,你的歷史看起來像這樣:

A - B - D master, HEAD 
    \ 
    C other 

,你想cherry pick提交CHEAD使得所得到的歷史變爲:

A - B - C' - D' master, HEAD 
    \ 
    C other 

然後,你可以這樣做:

  1. git checkout HEAD^HEAD移至B
  2. git cherry-pick other master上的B
  3. git branch -f master HEAD上應用提交CD使master指向同犯的HEAD
  4. git checkout master移動HEADmaster
+0

這就是我自己如何做的。 (雖然我會稱之爲最終提交'D',因爲它將是'D'的副本,而不是原來的'D'。) – torek

+0

確實,生成的'D'將具有不同於原來的一個,但由於第二個圖中只有一個'D',因此不需要用素數對其進行註釋。但是,如果有人將這兩個圖形相互比較,我確實看到了你的觀點。 –