我遇到以下与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>
它有效!
答案 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>