Git 删除已移动的文件后分支出现分歧

Git branch diverged after removing a file that has moved

主存储库中的一个文件已移至子文件夹,在我的本地服务器上,我删除了该文件,并打算在以后签入新位置时将其添加。

检查提交并执行 git pull --rebase origin master 我有一个冲突,指出该文件已在我的提交中删除,renamed/moved 在另一个提交中删除,因此合并失败。

然后我做了一个git rebase --abort

现在,当我执行 git 状态时,我收到消息:

Your branch and origin/master have diverged and have 1 and 27 commits each.

我该如何解决这个问题?

重新开始git rebase操作。

当你点击有冲突的步骤时(你删除了,其他移动了), 您需要决定如何解决冲突,最好是在与进行移动的其他开发人员讨论后。

如果应该删除该文件,则将其删除:

git rm path/to/renamed/file

如果文件应该保留,则添加它:

git add path/to/renamed/file

path/to/renamed/filegit status 给出的冲突路径。

删除或添加后,继续变基:

git rebase --continue

请注意,如果您决定 git add 冲突文件, 然后当你做 git rebase --continue, 它可能会告诉你:

No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

确实,该文件已经被其他分支添加, 你的 git add 你刚刚确认要保持那个动作, 没有真正添加任何新内容。 在这种情况下,使用 git rebase --skip.

继续变基

一开始,提交图可能是这样的:

您提交了更改,结果如下:

然后你想做一个 rebase pull。首先,origin/master 已更新:

如果 rebase pull 成功,图表应该是这样的:

但是因为冲突失败了,你中止了,所以又变成了这样:

masterorigin/masterC 之后分叉。如果你现在想避免冲突,你可以 运行 git reset HEAD^ --hard,这使得图形如下:

然后通过 git merge @{u}git merge origin/mastermaster 更新为 origin/master

现在您可以像最初一样删除文件并提交更改。最后的图表将是这样的:

您可以忽略 D,它现在已从 master 的 git 日志中消失,尽管它会在 repo 中存在很长一段时间。