git log --follow my/new-file
名前変更前後の変更を正しく表示 するファイルの名前を変更しました。
ただし、このコマンドは、以前のバージョンを表示するために機能しません: git show <rev>:my/new-file
.
私たちは走らなければなりませんgit show <rev>:my/old-file
。
my/ old -fileの代わりにmy/ new -file を使用してこのコマンドを実行する方法はありますか?
短い答えは簡単です。不快であれば、いいえです。
ここでの問題は、git show
最初に何を表示するかを (git rev-parse
多かれ少なかれ 経由で) 解決し、次にそれを表示しgit rev-parse
、ファイルをたどろうとして履歴をたどらず、各コミットからその親への差分を実行して、名前の変更のように見えるものを見つけることができます。
git log --follow
ただし、を使用すると、正確にそれが行われます。親コミットと比較して各コミットを調べ、差分を生成し、結果の差分がおそらくその時点でmy/new-file
名前が変更されたことを示唆しているかどうかを確認my/old-file
します。その場合、次に古いチェックを調整してmy/old-file
.
Git はおそらく、別のプログラム (または のモードgit log
) を使用して、一部のファイルが一部のコミット ペアで名前変更されたかどうかを確認し、そうであれば、以前のパスを などの他の git ユーティリティに提供することができますgit show
。次に、次のように言うことができます: git show $(git whatwas HEAD <rev> my/new-file)
、またはそのようなもの (この仮想git whatwas
コマンドの詳細によって異なります)。この回答whatwas
で概説した手法を使用して、基本的にこれを実行するスクリプトを作成できます。その過程でさまざまな厄介な詳細が明らかになると思いますが、理論は合理的です。