在不是主分支的分支中从上游Git挑选远程提交

时间:2018-10-02 13:12:07

标签: git cherry-pick

我遇到以下与this不同的情况。

这是我的本地仓库:

$ git branch
  branch1
  ...
  branchk
  master
* this-branch-where-fix-should-happen

我想要的是应用仅在upstream:staging分支中存在的提交。

我试图在某个分支中获取上游

$ git fetch upstream staging:staging

From github.com:<org>/<repo>
 * [new branch]              staging    -> staging

来自branch的新输出。

$ git branch
  branch1
  ...
  branchk
  master
  staging
* this-branch-where-fix-should-happen

现在尝试加入fix-branch

$ git cherry-pick -x <sha-1>
    fatal: bad object <sha-1>

在这种情况下,有没有正确的选择方法?还是我用完全错误的方式来做?


编辑:查找并修复问题

按照Tim Biegeleisen的指示

向上游获取

$ git fetch upstream

这是我的错误所在,我通过github站点获取提交号,但是实际上这是合并的<sha-1>。要获取正确的提交号:

$ git log --pretty=oneline --grep="<some-info-about-the-commit>" upstream/staging

我使用了--grep="#pull-request-number"并获得了正确的提交ID。

<correct-sha-1> PR description (#PR-number)

现在尝试加入fix-branch

$ git cherry-pick -x <correct-sha-1>

它有效!

1 个答案:

答案 0 :(得分:1)

git fetch一经建立,staging远程分支实际上应该在本地 存在,作为名为upstream/staging tracking 分支或类似的内容。如果您想从该跟踪分支(该镜像分支是远程的)的特定提交作为目标,只需键入

git log upstream/staging

查看该分支的提交,然后选择所需的提交。现在,樱桃采摘应该可以了:

# from the this-branch-where-fix-should-happen branch
git cherry-pick -x <sha-1 from staging>