Git合并移动并重命名文件

时间:2012-04-17 09:09:30

标签: git egit

在一个分支中,我重命名了文件。 在其他分支我移动了文件。 我将master分支与两个分支合并。 现在我在master分支中有两个文件,在合并期间没有冲突。 Git应该表现得那样吗?我至少会发出警告。

编辑:控制台让我警惕。所以这是自负问题。 (Egit是eclipse插件)

1 个答案:

答案 0 :(得分:2)

行为是正常的,因为您在没有git mv的情况下重命名了该文件; git正确检测到文件重命名,但没有提交删除旧文件,因此合并后现在有两个文件。

使用git mvmv后跟git rm oldfile,会导致合并冲突。

Initialized empty Git repository 
$ echo "hello" > hello.txt
$ git add hello.txt && git commit -m "first"
[master (root-commit) 708ec5f] first
 1 file changed, 1 insertion(+)
 create mode 100644 hello.txt
$ git branch mybranch
$ git mv hello.txt hello2.txt
$ git commit -m "renamed"
[master 00c68ed] renamed
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename hello.txt => hello2.txt (100%)
$ 
$ git checkout mybranch
Switched to branch 'mybranch'
$ mkdir test
$ git mv hello.txt test
$ git commit -m "moved"
[mybranch 044e091] moved
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename hello.txt => test/hello.txt (100%)

$ git checkout master
Switched to branch 'master'
$ git merge mybranch
CONFLICT (rename/rename): Rename "hello.txt"->"hello2.txt" in branch "HEAD" rename "hello.txt"->"test/hello.txt" in "mybranch"
Automatic merge failed; fix conflicts and then commit the result.