关于由于在两个分支中重命名导致的git合并冲突:由于在两个分支中重命名导致的git合并冲突 – 如何修复&

git merge conflict due to renaming in two branches - how to fix & avoid in future?

我有两个本地分支机构masterdev。两个分支都包含三个文件夹:

1
2
3
projectBeta
project
project_v1

我只想保留projectBeta,删除projectproject_v1,然后将projectBeta重命名为project。所以这就是我在两个分支上分别做的,在我进行的过程中承诺。所有的一切看起来都很好,直到我尝试将dev分支合并到master,我得到了一堆这样的错误:

1
2
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

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

如果我做一个git status,我会

1
2
3
4
5
6
7
# 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")

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

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

1
git co --theirs project/test.c

我得到

1
error: path 'project/test.c' does not have their version

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

最后,是否有一种最佳实践方法来避免将来出现这样的混乱局面?基本上,在内容尚未准备好首先合并的分支中独立地更改文件夹结构…


你需要的是Git MV和吉特令吉

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

你应该做的是:

1
2
3
git rm -r project
git rm -r project_v1
git mv projectBeta project


试试这个

1
git pull

转到文件夹删除Project和Project,将ProjectBeta重命名为Project。

1
2
3
git add --all
git commit
git push

你对其他部门也一样