0

我有一个提交,它在一个提交中从几个文件中切出块并将它们放入几个新文件中,而不更改或添加行。使用 vimdiff 手动验证没有更改或添加。

是否可以使用 git 找出从哪些文件中移动了哪些行以及是否有行添加到该提交中的新文件中?如果是,那么如何?

git blame -C file仍然将一些块归为新文件。

例如,在复制的一个目标文件中,从一个原始文件移动了两个块:一个 388 行,另一个 30 行。在这种情况下git blame -C file,将 12 个块分配给 HEAD 的新文件,其中散布着分配给旧版本原始文件的块。

一个简单的综合测试会产生预期的结果:

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

然而,真正的提交修改了不同的内容,并且在它之前有很长的历史。

4

1 回答 1

0

你可能需要更多的 -C 在 git 邮件列表上看到这个讨论,关于从最好到马虎的不同责备风格(和手册;-)

于 2013-05-28T11:53:32.930 回答