Git:cherry pick从其他提交中插入更改

4

我一直在尝试从一个分支中挑选一个特定的提交并将其合并到另一个分支中。假设我的历史记录如下:

 A - B - C - D   (master)
      \
       X - Y     (feature)

现在,假设我想将主分支上提交的更改D仅应用于功能分支,在Y之后立即应用。当我尝试这样做时,会出现合并冲突,并且在合并时我可以看到提交C的痕迹,尽管我只想挑选提交D。
我错过了什么?
1个回答

3

git cherry-pick master 或者 git cherry-pick <id-of-D> 会对比从 CD 的差异,然后尝试将这些差异应用到你当前的树/提交中(在本例中是 Y 的树)。如果 D 对与 C 相同或相近的内容进行了更改,则如你所述,你将“看到 commit C 的痕迹”,因为差异带有上下文。正是这个上下文使得 Git 能够找到在哪里更改了 Y,例如行、函数或整个文件是否已移动(例如在 X 和/或 Y 中)。

Git 不理解语义,只理解语法:只有当语法匹配时,才能轻松地使用 cherry-pick,否则它需要你的帮助(并且不知道什么时候不要向你显示),以便正确运行。


它实际上添加了在提交C中添加的代码行。这些行确实与提交D中添加的行相邻。这是您期望的行为吗? - Martijn Courteaux
我需要看实际的提交记录才能确定。但是,你可以使用 git show 命令查看提交记录 D,以了解 Git 认为需要应用哪些更改。 - torek
已经分不清了。这些提交和分支都被替换或删除了。(我真的学到了一些新的Git技能,非常感谢 :)) - Martijn Courteaux

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