Cliffnotes版本
git cherry-pick ABC..XYZ
。我希望ABC
包含在我对当前分支的提交中。我必须在ABC
之前引用提交吗?长版
master
,Apple
和NewApple
。Apple
建立在一个非常老版本的master
上,但只对十几个文件进行了处理,这些文件是在其他master
没有真正触及的文件夹上实现的。Apple
承诺ABC
,BCD
和XYZ
。这些是Apple
独有的承诺。请注意,BCD
和XYZ. These commits were NEVER commited to
master`之间约有10个提交NewApple
,它是从较新版本的master
中剥离出来的,其中包含更新的提交。Apple
未包含在内。之后的一切,包括NewApple
都被放到git cherry-pick ABC..XYZ
上。ABC
作为我的樱桃选择的一部分,而不引用XYZ
之前的提交。我担心,如果我这样做,我将不会获得NewApple
中的所有提交,或者它将尝试合并在较新版本的master之上的随机旧ABC
提交。...
Apple
[但]我希望Apple
包含在我对当前分支的提交中。我必须在master
之前引用提交吗?
简短回答:是的。
更长的答案:Git有这样的语法,因为它是如此常见的要求。任何适合识别一个特定提交的名称,例如git cherry-pick ABC..XYZ
或ABC
,都可以加上ABC
或master
字符,后跟数字。默认数字只有1,因此:
a123456
要么
^
表示“在名称~
选择之前提交”。
在这种情况下,您可能会写:
master^
请注意,Windows-y命令行解释器倾向于使用master~
做一些奇怪的事情,所以你可能更喜欢master
。这两个都在这里工作。
(更具体地说,git cherry-pick ABC^..XYZ
意味着第一个父母,而^
告诉Git计算许多第一父母。所以~
意味着与^number
相同。由于~number
是默认数字,你也可以写为master~3
。那里还有很多方法可以识别提交,所有这些都在master^1^1^1
中列出。)