在远程分支(主)中删除文件时变基后发生冲突

问题描述 投票:0回答:1

我有一个分支需要重新基于 master,因为 master 发生了变化。基本上,其中一个头文件已被删除,并且其某些内容已移动到另一个单元(在新的头文件/spurce 文件之间分割)。这项工作看起来很干净 - 只需将我的分支重新定位到远程主控上即可:

git rebase origin/master

然而,这造成了主要问题 - master 中的一个文件已被删除,但我的分支中仍然有它。这是输出:

First, rewinding head to replay your work on top of it...
Applying: checkin name...
Usind index info to reconstruct a base tree...
A   filename1
M   filename2
M   filename3
.
.
.
waring: squelched 60 whitespace errors
warning: 65 lines add whitespace errors
Falling back to patching base and 3-way merge ...
Auto-merging file1
Auto-merging file2
Auto-merging file3
Auto-merging file4
CONFLICT (modify/delete): fileheader1.h deleted in HEAD and     modified in ... Version ... of fileheader1.h left int tree.
Failed to merge in the changes.
Patch failed at 0001 ...
The copy of the patch failed is found in:
/home/wsluser/tempo/test/Engine/.git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git     rebase --abort".

所以为了解决这个冲突,我做了以下事情:

git rm fileheader1.h

结果输出是:

fileheader1.h needs merge rm 'fileheader1.h'

文件从文件夹中消失了;一切看起来都很高兴,但还有一个问题:

git rebase --continue

显示另一个冲突: 应用:....... .. .. 使用索引信息重建基础树... M .vscode/settings.json 无法合并更改。补丁在 0004 失败...

我手动解决并将其标记为已完成:

git add .vscode/settings.json

然后: git rebase --继续

最后,似乎一切都很好:

Applying ...

然后最后推动:

git push --force origin branchname

有趣的部分来了:

error: src refspec branchname does not match any. 
error: failed to     push some refs to 'git@...../reponame.git'

我对此消息的理解是,当尝试将更改提交/推送到不存在的分支时,它将出现。然而,在本例中,情况并非如此;该分支确实存在并且非常真实。我该如何解决这个问题?

git rebase conflict
1个回答
0
投票

然而,这造成了主要问题 - master 中的一个文件已被删除,而我的分支中仍然有它

不,这不是问题。问题是 master 中的文件已被删除 并且您在分支中编辑了它

因此,为了避免这个问题,不要在您的分支中编辑它。使用 reflog,撤消整个变基。现在将该文件恢复到编辑之前的状态。最后,不要变基;只需获取然后将 origin/master 合并到您的分支中即可。现在,任何剩余的冲突都会更容易解决,并且无需强行推动。

© www.soinside.com 2019 - 2024. All rights reserved.