我有以下情况与这种情况不同。
这是我的本地存储库:
$ 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>
在这种情况下,有没有正确的挑选方法?还是我以完全错误的方式这样做?
>解决方案:查找问题并修复根据蒂姆·比格莱森的指示
获取上游
$ 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>
它有效!
一旦你git fetch
,staging
远程分支实际上应该存在于本地,作为一个名为upstream/staging
的跟踪分支,或类似的东西。 如果要从此跟踪分支(镜像远程(中定位特定提交,只需键入
git log upstream/staging
以查看此分支中的提交,然后选择所需的提交。 现在樱桃采摘应该有效:
# from the this-branch-where-fix-should-happen branch
git cherry-pick -x <sha-1 from staging>