Cliffnotes version
- 假设我想运行以下命令:
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
. - 我希望能够将
ABC
提交作为我的樱桃选择的一部分,而无需引用Apple
中之前的提交。我担心如果我这样做,我将无法Apple
获得所有提交,或者它会尝试在较新版本的 master 之上合并随机的旧master
提交。
...
git cherry-pick ABC..XYZ
[但是]我希望ABC
包含在我对当前分支的提交中。我必须在ABC
之前引用提交吗?
简短的回答:是的。
更长的答案:Git 有一个语法,因为它是如此常见的要求。 任何适合标识一个特定提交的名称,如master
或a123456
,都可以用^
或~
字符后跟数字作为后缀。 默认数字仅为 1,因此:
master^
或
master~
表示"由名称master
选择的提交之前提交"。
在这种情况下,您可以编写:
git cherry-pick ABC^..XYZ
请注意,Windows-y 命令行解释器倾向于将^
视为转义字符,需要使用ABC^^..XYZ
或"ABC^..XYZ"
输入命令,因此您可能更喜欢~
。 任何一个都在这里工作。
(更具体地说,^number
表示第1 个父级,而~number
告诉 Git 数回那许多第一代父母。 所以master~3
的意思和master^1^1^1
一样。 由于1
是默认数字,因此您也可以将其写为master^^^
。 还有更多方法可以识别提交,所有这些都在 gitrevisions 文档中进行了概述。