考虑这个测试脚本.
#!/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检测x到y在分支中重命名的那个,并让我有机会解决合并冲突.
相反,git忽略(无法检测)重命名,并说x在y创建新的不相关文件时在分支中删除了.我如何说服git将其作为重命名的文件处理?
谢谢!
你是对的:git重命名检测,而不是重命名跟踪,如果文件已经"太多"(对于某些"太多"的值),git声明这是一个不同的文件,而不是重命名文件.
对此没有完美的解决方法.通常最好的选择,如果你的git足够新(1.7.4或更高),就是将-X rename-threshold=<n>旗帜传递给git merge.降低阈值使git检测更多重命名(您可以使用它git diff -M来测试适当的阈值).
| 归档时间: |
|
| 查看次数: |
334 次 |
| 最近记录: |