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

标签 git merge merge-conflict-resolution

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

projectBeta
project
project_v1

我只想保留 projectBeta 并删除 projectproject_v1 然后将 projectBeta 重命名为 项目。所以这就是我在两个分支上分别做的事情,在我进行的过程中做出 promise 。一切看起来都很好,直到我尝试将 dev 分支 merge 到 master,但我遇到了一堆这样的错误:

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,我会得到

# 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")

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

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

git co --theirs project/test.c

我明白了

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

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

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

最佳答案

你需要的是git mvgit rm .

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

你应该做的是:

git rm -r project
git rm -r project_v1
git mv projectBeta project

关于由于在两个分支中重命名导致 git merge 冲突 - 将来如何修复和避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264876/

相关文章:

git-merge - 如何解决Gerrit批准的审查中的合并冲突?

git - 让 Git 在其 "<<<<<<< HEAD" merge 行上使用 CRLF

git - 为什么 git clean -dfX 不删除 .gitignore 中的 lib 文件?

git - gitk 可以默认显示 merge 的差异吗?

python - 将数据框与不可散列的列合并

git - 如何找出正在进行的 merge 的父修订?

git - git 上更智能的冲突解决器

每次我想提交和推送我的项目时,Git 都会要求我输入密码

git - jhbuild 存储库克隆失败

安卓路径 : Merge several paths and draw text on merged path