如果我的本地分支与Git中的remote分支发生分歧,我可以模仿快进拉吗



我有三个分支firstsecondmaster:

D---E---F first
/
A---B---...---C---... master

G---H second
  • first是最终版本,正在等待作为单个压缩提交合并到master
  • second仍在开发中

我想定期检查与first合并的secondsecond中出现新的提交后是否仍能正常工作。

我有两个存储库:

  • repo1,我只需将新的提交IJ添加到second,并将它们推送到origin
  • repo2,我的工作分支是second,它已在first的基础上重新建立。我永远不会推送它,repo2只用于本地构建检查
repo1
D---E---F first
/
A---B---...---C---... master

G---H---I---J second, origin/second
repo2
$ git checkout second
$ git rebase first
D---E---F first
/
A---B---...---C---... master

D'--E'--F'--B'--...---C'--G---H second

重要的是,提交E(E')会导致整个项目的长期重建,所以我希望它永远不会被重新应用,并保持原样。

这就是为什么我不能使用:

git pull -r

second上,因为它会重新排列所有提交并导致此

repo2
A---B---...---C---G---H---I---J---D'--E'--F' second

此外,我不能使用快速转发拉,因为repo2origin/second中的second分叉。但我的猜测是,像快速拉动这样的事情确实是可能的。它应该产生以下结果:

repo2
D---E---F first
/
A---B---...---C---... master

D'--E'--F'--B'--...---C'--G---H---I---J second

我可以用一些Git命令序列来模仿它吗?

从您的repo2:您可以检查origin1/second的状态,然后运行git fetch,检查新状态,并尝试选取delta:

before=$(git rev-parse orgin1/second)
git fetch origin1
after=$(git rev-parse orgin1/second)
if [ "$before" != "$after" ]; then
git checkout second
git cherry-pick ${before}..${after}
fi

如果您不仅需要使用硬编码的second分支,还需要使用任何活动分支:

branch=$(git branch --show-current)
before=$(git rev-parse origin1/$branch)
git fetch
...

或者,如果您想将要获取的分支作为参数传递:

branch=$1
if [ -z "$branch" ]; then
branch=$(git branch --show-current)
fi

或者。。。

相关内容

  • 没有找到相关文章

最新更新