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 fetch
,staging
远程分支实际上应该存在 本地,作为 tracking 分支称为 upstream/staging
,或类似的东西。如果你想从这个跟踪分支中定位一个特定的提交,它镜像远程,只需键入
git log upstream/staging
查看此分支的提交,然后选择您想要的。现在樱桃采摘应该可以了:
# from the this-branch-where-fix-should-happen branch
git cherry-pick -x <sha-1 from staging>
我有以下不同于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 fetch
,staging
远程分支实际上应该存在 本地,作为 tracking 分支称为 upstream/staging
,或类似的东西。如果你想从这个跟踪分支中定位一个特定的提交,它镜像远程,只需键入
git log upstream/staging
查看此分支的提交,然后选择您想要的。现在樱桃采摘应该可以了:
# from the this-branch-where-fix-should-happen branch
git cherry-pick -x <sha-1 from staging>