昨天我们用 git 遇到了一个非常奇怪的情况:
我们像往常一样创建了一个功能分支。然后,有人会在该功能分支上工作几天。
与此同时,主分支上发生了一些重要的事情。功能分支也需要这些更改。
因此,我们将主分支合并到功能分支中(没有变基,因为我们的功能分支通常会立即推送到远程,因为我们需要在一个功能上进行协作)。此合并仅在本地完成,尚未推送到远程。
功能分支上的工作继续
随着 master 的合并 + 继续工作,本地功能分支 new_feature 现在比 origin/new_feature 领先 40 个提交
现在我们想将这 40 个提交推送到远程功能分支。首先,我们像往常一样在推送之前执行 git pull --rebase ,因为其他人可能在我们之前推送了一些提交。
现在我们经历了无数的冲突。我们认为不值得修复 40 次提交并执行 git rebase --abort。然后我们尝试 git pull --no-rebase。我们得到:“已经是最新的” - 奇怪
由于 git status 没有告诉我们本地分支和远程分支有分歧,我们试试 git push
出乎意料的是, git push 奏效了。如果我们尝试推送到自上次拉取后已更改的远程分支,我们将被拒绝。所以很明显 remote 没有改变,但是 git pull --rebase 做了一些奇怪的事情。
所以这件事的奇怪之处在于
git pull --rebase 没有立即返回“已经是最新的”并且
git pull --rebase 报告了大量冲突,实际上没有一个应该退出(报告的冲突与功能分支上的工作无关)
什么可能导致这种情况?