git 要求您指定父编号 ( -m
),因为您的合并提交有两个父,而 git 不知道合并的哪一侧应该被视为主线。因此,使用此选项,您可以指定主线和cherry-pick 的父编号(从 1 开始),以便重播相对于指定父级的更改。
要找出您的提交父母,请尝试:
git show --pretty=raw <merge_commit>
或者:
git cat-file -p <merge_commit>
甚至为了更好的 GUI 可见性,请尝试:
gitk <merge_commit>
结果,你应该得到类似的东西:
commit fc70b1e9f940a6b511cbf86fe20293b181fb7821
tree 8d2ed6b21f074725db4f90e6aca1ebda6bc5d050
parent 54d59bedb9228fbbb9d645b977173009647a08a9 = <parent1_commit>
parent 80f1016b327cd8482a3855ade89a41ffab64a792 = <parent2_commit>
然后通过以下方式检查您的每个父母的详细信息:
git show <parent1_or_2_commit>
添加--stat
以查看已修改文件的列表。
或者使用以下命令来比较更改(基于上述父级):
git diff <parent1_or_2_commit>..<commit>
添加--stat
以查看已修改文件的列表。
或使用组合 diff 通过以下方式比较两个父母:
git diff --cc <parent1_commit>
git diff --cc <parent2_commit>
然后为您的樱桃选择指定从 1 开始的父编号,例如
git cherry-pick -m 1 <merge_commit>
然后跑去git status
看看是怎么回事。如果您还不想提交更改,请添加-n
选项以查看会发生什么。然后当你不开心时,重置为 HEAD ( git reset HEAD --hard
)。如果您遇到 git 冲突,您可能必须手动解决它们或指定合并策略 ( -X
),请参阅:如何解决 Git 中的合并冲突?