概述:
$ git pull
... time passes ...
$ git checkout topic # remote topic
$ git checkout master
$ git merge topic
$ git push
non-fast-forward updates were rejected
$ git pull
merge by rebase
$ git push
结果是文件更改被推送,但返回主题分支的引用已丢失。 (在github上,这会导致请求不关闭。)它还使图形看起来很奇怪,因为主题分支未显示为合并为主。
导致此情况发生的触发器是需要合并的合并后的拉动。也就是说,在主题合并期间更改了master。
拉动的设置是始终使用pull --rebase。
另一方面影响放置在合并点上的标签有点丢失。标签从未被推送过(虽然它是被要求的)。
我们能够通过重新合并主题分支来修复图形。
我们将来如何避免这种情况?是什么导致了这个问题?我觉得我们没有做错任何事情。
谢谢!
PS 配置设置为仅拉/推当前分支。
答案 0 :(得分:4)
“修复”是不使用pull --rebase
- 变基是失去历史的原因。合并而不是重新定位的整个要点是保持单独的分支历史。
git pull
通常相当于git fetch
+ git merge
。
git pull --rebase
是git fetch
+ git rebase
。
前者保留历史链接;后者创建了全新的提交。 (您有git pull
设置为始终重新绑定的特殊原因吗?)
在合并git pull
之前,您还可以在master
上执行topic
,以确保master
是最新的(以便合并不会导致非快进历史。)