Git 在非 master 分支中从上游挑选远程提交

Git cherry-picking remote commit from upstream, in a branch that isn't master

我有以下不同于this one的情况。

这是我的本地仓库:

$ 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>

在这种情况下有没有正确的cherry pick方法?还是我的做法完全错误?


解决方案:找到问题并修复它

按照 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>

而且有效!

只要你 git fetchstaging 远程分支实际上应该存在 本地,作为 tracking 分支称为 upstream/staging,或类似的东西。如果你想从这个跟踪分支中定位一个特定的提交,它镜像远程,只需键入

git log upstream/staging

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

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