使用Git cherry-pick命令将一个提交复制并放置在其它提交之下。

11
据我所知,默认情况下,cherry-pick 命令会将一个提交放置在当前分支的顶部。是否可以在 Git 中 cherry-pick 一个提交并将其放置在当前提交的下方?
2个回答

17

在 cherry-pick 之后,您始终可以执行 rebase。因此,它看起来应该像这样:

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

在变基窗口中交换提交顺序。

第二选项

如果您想要像您所说的那样仅解决一次冲突,可以采取冗长的方法。 删除当前提交,挑选另一个提交,然后再挑选最新的提交。

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>

1
问题在于,在挑选樱桃后,我进入了“冲突解决”阶段。我希望只在挑选的提交不在顶部(而是在顶部正下方的正确位置)时解决冲突。 - nyarlathotep108
1
在答案中,我提供了第二个(更长的)选项。 - Igal S.
@nyarlathotep108:你可能想考虑尝试使用git rerere - Hasturkun

3

这里有另一种方法。假设您的历史记录如下:

A - B - D master, HEAD
    \
     C other

如果您想要在HEAD之前挑选提交C,以使得结果历史记录变为:

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

然后你可以执行以下步骤:

  1. git checkout HEAD^HEAD 移动到提交 B
  2. git cherry-pick other master 在提交 B 的基础上应用提交 CD
  3. git branch -f master HEAD 使 master 指向与 HEAD 相同的提交
  4. git checkout masterHEAD 移动到 master

这是我自己会做的方式。(尽管我会将最终提交称为 D',因为它将是 D 的副本而不是原始的 D。) - torek
是的,生成的“D”将具有与原始SHA-1不同的值,但由于第二个图中只有一个“D”,因此无需使用质数进行注释。然而,如果要将两个图进行比较,我确实理解您的观点。 - Enrico Campidoglio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接