由于在两个分支中重命名而导致git合并冲突 - 如何修复和避免将来使用?

Sub*_*ubG 13 git merge merge-conflict-resolution

我有两个地方分支机构masterdev.两个分支包含三个文件夹:

projectBeta
project
project_v1
Run Code Online (Sandbox Code Playgroud)

我想只保留projectBeta和删除project,并project_v1然后重命名projectBetaproject.这就是我在两个分支上单独做的事情,随着我的进展而做出承诺.一切都看起来很好,直到我试图将dev分支合并到主人,我得到了一堆这样的错误:

CONFLICT (rename/delete): Rename projectBeta/test.c->project/test.c in dev and deleted in HEAD
CONFLICT (rename/delete): Rename project_v1/test.c->project/test.c in HEAD and deleted in dev
Run Code Online (Sandbox Code Playgroud)

所以看起来Git在不同的分支中以不同的方式跟踪重命名.

如果我做了git status,我得到

# On branch master
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   added by us:        project/test.c
#
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)

我不明白的第一件事是,当合并报告说它被我们和他们重命名和删除时,状态只是说它是"我们添加的"?

其次,我想使用test.c的dev分支版本(它们),但现在我尝试了

git co --theirs project/test.c
Run Code Online (Sandbox Code Playgroud)

我明白了

error: path 'project/test.c' does not have their version
Run Code Online (Sandbox Code Playgroud)

...所以我不知道如何确保合并将使用dev分支的内容?

最后,是否有一种最佳实践方法可以避免将来出现如此混乱?基本上,在内容尚未准备合并的分支中独立更改文件夹结构...

小智 2

您需要的是git mvgit rm

我的猜测是你可能在不让 git 知道的情况下管理了目录。您必须让 git 知道,因为它会跟踪所有文件夹并需要知道如何正确处理它们。

你应该做的是:

git rm -r project
git rm -r project_v1
git mv projectBeta project
Run Code Online (Sandbox Code Playgroud)