2016-03-15 61 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',因此不需要用素数对其进行注释。但是,如果有人将这两个图形相互比较,我确实看到了你的观点。 –