我一直在尝试从一个分支中挑选一个特定的提交到另一个分支。假设我的历史记录是这样的:
A - B - C - D (master)
X - Y (feature)
现在,假设我想只应用在master上提交D的更改到特性分支,就在y之后。当我尝试这样做时,会有合并冲突,我可以看到合并时提交C的痕迹,尽管我只想选择提交D。
我错过了什么?
git cherry-pick master
或git cherry-pick <id-of-D>
从C
到D
进行diff,然后尝试将该diff应用于当前的树/提交(在本例中,为Y
的树)。如前所述,如果D
更改了C
中也更改了的内容,那么您将"看到提交C
的痕迹",因为diff带有上下文。在Y
中,如果行、函数或整个文件被移动了(例如,在X
和/或Y
中),git可以找到需要更改的内容。
Git不理解语义,只理解语法:它只会在语法匹配的情况下挑选干净的,如果不匹配,它将需要你的帮助(并且不知道不显示给你什么)。