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/file
是 git 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 成功,图表应该是这样的:
但是因为冲突失败了,你中止了,所以又变成了这样:
master
和 origin/master
在 C
之后分叉。如果你现在想避免冲突,你可以 运行 git reset HEAD^ --hard
,这使得图形如下:
然后通过 git merge @{u}
或 git merge origin/master
将 master
更新为 origin/master
。
现在您可以像最初一样删除文件并提交更改。最后的图表将是这样的:
您可以忽略 D
,它现在已从 master
的 git 日志中消失,尽管它会在 repo 中存在很长一段时间。
主存储库中的一个文件已移至子文件夹,在我的本地服务器上,我删除了该文件,并打算在以后签入新位置时将其添加。
检查提交并执行 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/file
是 git 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 成功,图表应该是这样的:
但是因为冲突失败了,你中止了,所以又变成了这样:
master
和 origin/master
在 C
之后分叉。如果你现在想避免冲突,你可以 运行 git reset HEAD^ --hard
,这使得图形如下:
然后通过 git merge @{u}
或 git merge origin/master
将 master
更新为 origin/master
。
现在您可以像最初一样删除文件并提交更改。最后的图表将是这样的:
您可以忽略 D
,它现在已从 master
的 git 日志中消失,尽管它会在 repo 中存在很长一段时间。