git合并重命名冲突

Posted

技术标签:

【中文标题】git合并重命名冲突【英文标题】:git merge rename conflict 【发布时间】:2012-10-29 08:04:10 【问题描述】:

我从现有分支创建了一个新分支:

git checkout master
git checkout -b test

然后在新分支中我重命名了一个文件:

git mv foo.txt fooOld.txt
git mv fooNew.txt foo.txt
git commit -am "Rename file"

同时其他人在主分支上编辑了 fooNew.txt 并推送了更改:

git co master
echo "Some changes" >> fooNew.txt
git commit -am "Do some important changes"
git push origin master

现在,当我尝试从 master 中提取更改时,出现错误:

CONFLICT (modify/delete): fooNew.txt deleted in HEAD and modified in master.

如何合并这 2 个分支,以便最终得到一个 foo.txt 文件,其中包含对 master 上的 fooNew.txt 所做的更改?

【问题讨论】:

您是否在git pull 命令之前将test 合并到您的master?如果不是,则将master 合并到test,解决冲突,然后合并回master。如果已经合并,那么您需要事先将您的 master 恢复到以前的提交。 你尝试过变基吗? git pull --rebase origin master 谢谢,我试过 git pull --rebase origin master 并先将 test 合并到 master 但我仍然遇到同样的问题,可以通过保存修改后的 foo.txt 文件或删除它来解决冲突。我也尝试过通过测试重新设置主控,但没有运气...... 我放弃并进行了合并,保存了修改后的文件,然后进行了手动合并以提取 fooNew.txt 和 foo.txt 之间的所有更改(然后在完成后删除 fooNew.txt )。但如果有不涉及手动合并的解决方案,我很感兴趣。 有趣的阅读:***.com/questions/11331494/… 【参考方案1】:

使用你的方法,我没有问题。

$ git checkout -b test
Switched to a new branch 'test'

$ git mv foo.txt fooOld.txt

$ git mv fooNew.txt foo.txt

$ git commit -am "Rename file"
[test bf82f6d] Rename file
 1 files changed, 0 insertions(+), 0 deletions(-)
 rename fooNew.txt => fooOld.txt (100%)

$ git checkout master
Switched to branch 'master'

$ echo "Some changes" >> fooNew.txt

$ git commit -am "Do some important changes"
[master 653c0df] Do some important changes
 1 files changed, 1 insertions(+), 0 deletions(-)

$ git checkout test
Switched to branch 'test'

$ git merge master
Auto-merging fooOld.txt
Merge made by the 'recursive' strategy.
 fooOld.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

【讨论】:

以上是关于git合并重命名冲突的主要内容,如果未能解决你的问题,请参考以下文章

禁用 Git 重命名检测

如何在 GitHub 网站上重命名分支?

在dos中,包含@的文件可以被重命名吗?不能的话,怎么办?谢谢!在线等!

sql 重命名,命名冲突

Windows:文件重命名和目录迭代冲突

如何重命名 .git 目录?