0

1 回のコミットで、行を変更または追加することなく、いくつかのファイルからチャンクを切り取り、それらをいくつかの新しいファイルに入れるコミットがあります。変更または追加がないことは、vimdiff を使用して手動で検証されました。

git を使用して、どのファイルからどの行が移動されたか、およびそのコミットで新しいファイルに追加された行があったかどうかを確認することはできますか? はいの場合、どのように?

git blame -C fileまだいくつかのチャンクを新しいファイルに属していると見なします。

たとえば、これが再現される 1 つの宛先ファイルでは、1 つの元のファイルから移動された 2 つのチャンクがありました。1 つは 388 行、もう 1 つは 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

ただし、実際のコミットはさまざまなコンテンツを変更するものであり、その前に長い歴史があります。

4

1 に答える 1