移动后,当文件被显着修改时,Git不会检测重命名

Hel*_*Hel 3 git

考虑这个测试脚本.

#!/bin/sh -x
rm -rf test
git init test
cd test
for I in {1..100}; do
    echo $I >> x
done
git add x
git commit -am "initial commit"
git checkout -b branch
git mv x y
git commit -am "renamed"
rm y
for I in {1..60}; do
    echo branch$I >> y
done
for I in {61..100}; do
    echo $I >> y
done
git commit -am "changed the first 60 lines in branch"
git checkout master
rm x
for I in {1..60}; do
    echo master$I >> x
done
for I in {61..100}; do
    echo $I >> x
done
git commit -am "changed the first 60 lines in master"
git merge -s recursive -X patience branch
git status
Run Code Online (Sandbox Code Playgroud)

我想要发生的是让git检测xy在分支中重命名的那个,并让我有机会解决合并冲突.

相反,git忽略(无法检测)重命名,并说xy创建新的不相关文件时在分支中删除了.我如何说服git将其作为重命名的文件处理?

谢谢!

tor*_*rek 5

你是对的:git重命名检测,而不是重命名跟踪,如果文件已经"太多"(对于某些"太多"的值),git声明这是一个不同的文件,而不是重命名文件.

对此没有完美的解决方法.通常最好的选择,如果你的git足够新(1.7.4或更高),就是将-X rename-threshold=<n>旗帜传递给git merge.降低阈值使git检测更多重命名(您可以使用它git diff -M来测试适当的阈值).