繁体   English   中英

此分支是 xy:master 之前的 x 次提交

[英]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 upstreamgit 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM