我有一个提交,它从几个文件中剪切块并将它们放入两个新文件中,而不需要更改或添加行,在单个提交中。使用vimdiff手动验证没有更改或添加。
是否有可能使用git来查找哪些行从哪些文件中移动,以及是否有行添加到该提交的新文件中?如果是,那么是怎么做的?
git blame -C file
仍然将一些块属性为属于新文件。
例如,在一个目标文件中,有两个块从一个原始文件移动:一个388行,另一个30行。在这种情况下,git blame -C file
在HEAD处将12块属性归给新文件,其中穿插着在旧版本处归给原始文件的块。
一个简单的综合测试产生预期的结果:
git init
xxd -p -cols 32 -len 32000 /dev/urandom > a
git add a
git commit -m 'Add a'
sed -ne '100,487p; 600,629p' a > b
sed -i -e '100,487d; 600,629d' a
git add *
git commit -m 'Move pieces of a to b'
git blame -C b
但是,真正的提交修改不同的内容,并且在此之前有很长的历史。
您可能需要更多的- c,请参阅git邮件列表中关于从最佳到草率的不同责备风格的讨论(以及手册;-)