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合并重命名冲突的主要内容,如果未能解决你的问题,请参考以下文章