我一直在尝试从一个分支中挑选一个特定的提交并将其合并到另一个分支中。假设我的历史记录如下:
A - B - C - D (master)
\
X - Y (feature)
现在,假设我想将主分支上提交的更改D仅应用于功能分支,在Y之后立即应用。当我尝试这样做时,会出现合并冲突,并且在合并时我可以看到提交C的痕迹,尽管我只想挑选提交D。
我错过了什么?
我一直在尝试从一个分支中挑选一个特定的提交并将其合并到另一个分支中。假设我的历史记录如下:
A - B - C - D (master)
\
X - Y (feature)
git cherry-pick master
或者 git cherry-pick <id-of-D>
会对比从 C
到 D
的差异,然后尝试将这些差异应用到你当前的树/提交中(在本例中是 Y
的树)。如果 D
对与 C
相同或相近的内容进行了更改,则如你所述,你将“看到 commit C
的痕迹”,因为差异带有上下文。正是这个上下文使得 Git 能够找到在哪里更改了 Y
,例如行、函数或整个文件是否已移动(例如在 X
和/或 Y
中)。
Git 不理解语义,只理解语法:只有当语法匹配时,才能轻松地使用 cherry-pick,否则它需要你的帮助(并且不知道什么时候不要向你显示),以便正确运行。
git show
命令查看提交记录D
,以了解 Git 认为需要应用哪些更改。 - torek