如何在我的cherry pick命令中包含我的第一个提交?

时间:2017-12-28 22:17:04

标签: git cherry-pick

Cliffnotes版本

  • 假设我要运行此命令:git cherry-pick ABC..XYZ。我希望ABC包含在我对当前分支的提交中。我是否必须在ABC之前引用提交?

长版

  • 所以我有分支masterAppleNewApple
  • Apple是基于master的旧版本构建的,但只处理了十几个文件,这些文件是在master其余部分没有真正触及的文件夹上实现的。
  • Apple已提交ABCBCDXYZ。这些是Apple独有的提交。请注意,BCDXYZ. 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提交。

1 个答案:

答案 0 :(得分:4)

  

... <table id="chPurchaseTable"> <thead> <tr> <th>Quantity</th> <th>Product</th> <th>u/m</th> <th>Price Each</th> <th>Line Total</th> <th></th> </tr> </thead> <tbody> [但]我希望git cherry-pick ABC..XYZ包含在我对当前分支的提交中。我必须在ABC之前引用提交吗?

简答:是的。

更多种类的答案:Git有这样的语法,因为它是如此常见的要求。任何适合标识某个特定提交的名称(例如ABCmaster)都可以加上a123456^个字符,后跟数字。默认数字只有1,因此:

~

master^

表示“在名称master~ ”选择的提交之前提交。

在这种情况下,您可以写:

master

请注意,Windows-y命令行解释程序倾向于使用git cherry-pick ABC^..XYZ 做一些奇怪的事情,因此您可能更喜欢^。这两个都在这里工作。

(更具体地说,~表示 - 第一个父级,而^number则告诉Git计算许多第一个父级。所以~number表示与master~3相同。由于master^1^1^1是默认数字,因此您也可以将其写为1。还有更多方法可以识别提交,所有这些都在the gitrevisions documentation中列出。)