[英]This branch is x commits ahead of xy:master
我在GitHub上创建了一个项目,开始推送 PR(每个都在不同的分支下)。 一切都很好。 然后我看到 my:master 是 X 提交落后所以我想更新到当前上游 state。
我试过了:
git remote add upstream https://github.com/home-assistant/brands.git
git pull upstream master
git push --force-with-lease origin master
我得到:
这个分支比 home-assistant:master 提前 4 次提交。
现在,每次我创建新 PR 时,它都会添加额外的提交:
伟大的。 我在这里发现了许多类似的问题和答案,但似乎都没有工作(获取、重置 --hard origin/master)。
有没有办法解决这个问题,或者我应该删除叉子并重新开始?
我需要查看git log --graph --decorate --oneline
才能确定,但这就是可能发生的情况。
git pull upstream master
实际上是git fetch upstream
和git merge upstream/master
。 与任何合并一样,它将留下合并提交。 这就是你所看到的。
这些合并是不必要的。 与合并功能分支不同,这些更新合并对这个项目的未来编码人员没有兴趣。 他们妨碍了。
您可以摆脱它们,而不是在上游/主控之上合并,而是在上游/主控之上重新定位。 git rebase upstream/master
。 您的本地提交将在最新的上游/主节点之上重写,而不是合并。 现有的不必要的合并将被消除。
我建议为所有拉动重新设置基础。 您可以使用git config --global pull.rebase merges
配置您的 Git 来执行此操作。 这将变基,但保留现有的合并。
最后,为避免将来出现这种情况,请不要在您的 master 分支上工作。 保持主人清洁。 在功能分支中完成所有工作,将其用作您的 PR,然后删除功能分支。 这样可以避免很多问题。
为了说明,这就是“X 提交发散”的样子。
upstream
A - B - C - G - H - I [master]
origin
G - H - I [upstream/master]
/
A - B - C - D - E [master]
而在你git pull upstream master
...
$ git pull upstream master
upstream
A - B - C - G - H - I [master]
origin
G - H - I [upstream/master]
/ \
A - B - C - D - E - M [master]
注意合并。 为了消除这种情况,请在上游/主服务器之上重新设置基准。
$ git rebase upstream/master
upstream
A - B - C - G - H - I [master]
origin
A - B - C - G - H - I [upstream/master]
\
D1 - E1 [master]
现在你的历史很好而且线性,就好像你一直在最新的大师之上工作一样。
最后,这项工作应该在一个特性分支中完成。 看起来像这样。
upstream
A - B - C - G - H - I [master]
origin
G - H - I [upstream/master]
/
A - B - C [master]
\
D - E [feature]
更新 master 现在是一个简单的快进。
$ git checkout master
$ git pull upstream master
upstream
A - B - C - G - H - I [master]
origin
[upstream/master]
A - B - C - G - H - I [master]
\
D - E [feature]
并且您可以在 master 之上重新定位您的功能分支(或跳过一个步骤并直接在上游/master 之上重新定位)。
$ git checkout feature
$ git rebase master
upstream
A - B - C - G - H - I [master]
origin
[upstream/master]
A - B - C - G - H - I [master]
\
D1 - E1 [feature]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.