我的提交历史记录中有以下情况:
A1-...-A2
B1-B2-...-B3----------B4-B5
/
C1-C2-C3
然后我做了(经过git checkout A2
和干净的git status
(git cherry-pick --no-commit C2..B5
. 现在,C2
file1.txt
中引入了一条重要的台词,比如
file1.txt
-line x
+line x with new part
并且"带有新部分的行 x "存在于所有提交 C2 到 B5 中。 但是在樱桃采摘之后,变化没有出现,file1.txt
看起来仍然像
...
line x
...
我期望一行"带有新零件的 x 行"。 我想,我不明白这些变化,做了
git diff HEAD C2 file1.txt
file1.txt
-line x
+line x with new part
按预期显示更改。我也检查过git diff HEAD C3 file1.txt
,git diff HEAD B4 file1.txt
并且git diff HEAD B5 file1.txt
相同的结果。
git rev-parse HEAD
导致按预期A2
并git status
说"在分支 A 上,您的分支是最新的'origin/A'。 没有什么可承诺的,工作树干净"。
我错过了什么?有什么想法吗?
参考:
如何挑选一系列提交并合并到另一个分支中,
如何在 Git 中合并特定提交并从一个
分支拉取所有提交,将指定的提交推送到另一个分支(我希望, 答案中的评论不是问题"...同样,从一个分支到另一个分支挑选提交基本上涉及生成一个补丁, 然后应用它,从而也以这种方式失去历史。
编辑@eftshift0:git cherry-pick --no-commit C1..B5
后乍一看正确:
差异显示
<<<<<<< HEAD
line x # current status of A2
||||||| parent of C2...
line x # common ancestors of C1 and A2
=======
line x with new part # from merge (new stuff)
>>>>>>> C2...
从文档中:
git-cherry-pick - 应用一些现有引入的更改 提交概要
描述 给定一个或多个现有提交,应用每个更改 介绍,为每个提交记录一个新的提交。这需要您的 工作树要干净(HEAD 提交没有修改(。
因为你说的是C2..B5
,所以不考虑C2
的变化。 试试C1..B2
。