我叉形在GitHub上的一个项目,开始推动公关(每个在不同的分支)。一切都很好。然后我看到我的:master是X提交,所以我想更新到当前的上游状态。
我试过:
git remote add upstream https://github.com/home-assistant/brands.git
git pull upstream master
git push --force-with-lease origin master

我得到:
该部门是4位提前提交家事助理:主人.
现在,每当我创建新的PR时,它都会添加额外的提交:

太棒了。我在这里发现了许多类似的问题和答案,但似乎没有一个在起作用(提取,重置-硬起源/主人)。
有没有办法解决这个问题,或者我应该删除叉子,重新开始?
发布于 2020-04-10 19:00:10
我需要看到git log --graph --decorate --oneline来确定,但以下是可能发生的事情。
git pull upstream master实际上是git fetch upstream和git merge upstream/master。与任何合并一样,它将留下合并提交。这就是你看到的。
这些合并是不必要的。与合并特性分支不同,这些更新合并对此项目的未来编码人员没有任何兴趣。他们挡了路。
你可以摆脱它们,而不是在上游/主/主之上合并,而是在上游/主/主之上重新建立基础。git rebase upstream/master。本地提交将被重写在最新的上游/主服务器之上,而不是合并。现有的不必要的合并将被消除。
我建议对所有的拉链进行调整。您可以将Git配置为使用git config --global pull.rebase merges完成此操作。这将重新定位,但保留现有的合并。
最后,为了避免这种情况在未来,不要工作在您的硕士分支。让主人保持干净。在特征分支中完成您的所有工作,使用它作为您的公关,然后删除特性分支。这将避免许多问题。
为了说明这一点,下面是“由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]更新母版现在是一种简单的快速转发。
$ 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]您还可以将您的特性分支重新定位在主(或跳过一个步骤,并直接在上游/主)之上重基。
$ 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]https://stackoverflow.com/questions/61143806
复制相似问题