2010-12-08 2 views
57

git mvを使用してファイル数を2つに変更しました。git stashを使用しました。HEADを変更せずにすばやく見てからgit stash popをもう一度やり直しました。私の動きはコミットリストから消えてしまったので、私はgit rmでそれらを元に戻し、gitがリネームされていることを確認したコミットメッセージがリネームされました。だから私はそれ以上考えませんでした。gitログは、移動したファイルの履歴を表示しないことがあります。何ができるのですか?

今、コミット後、私は移動したファイルの履歴を取得することはできません!

~/projects% git log --summary 
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a 
Author: brone 
Date: Wed Dec 8 22:37:54 2010 +0000 

    Moved R_DebugUI into runtime 

delete mode 100644 test/R_DebugUI_iOS.h 
delete mode 100644 test/R_DebugUI_iOS.m 
create mode 100644 system/runtime/src/R_DebugUI_iOS.h 
create mode 100644 system/runtime/src/R_DebugUI_iOS.m 

<<snip older commits>> 
~/projects% 

私は今、これらの移動したファイルのうちの一つの歴史を取得しようとしているので、私は古いバージョンを見ることができますが、私は非常に何かを得ることはありません。ここでは、問題のコミットについて言っているgitのです便利:それがあった時点で停止し

~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m 
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a 
Author: brone 
Date: Wed Dec 8 22:37:54 2010 +0000 

    Moved R_DebugUI into runtime 
~/projects/system/runtime/src% 

(私も-M-C--find-copies-harderのない、しかし無駄にそれを試してみた。)

私はその昔の名前でその歴史を得ることができ、古い場所から削除されました:

~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m 
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a 
Author: brone 
Date: Wed Dec 8 22:37:54 2010 +0000 

    Moved R_DebugUI into runtime 

delete mode 100644 test/R_DebugUI_iOS.m 

commit 32a22d53c27e260714f759ecb3d3864e38b2e87f 
Author: brone 
Date: Tue Dec 7 23:52:51 2010 +0000 

    Can set debug UI's alpha. 

<<snip older commits>> 
~/projects% 

私はこの時点で完全に詰まったわけではありませんが、私はこのようなことを常に行う必要はないと思います。 (私は人生で少なくとも1回動くかなりの数のファイルがあると予想しています)

私は間違っている?ファイルの古いコピーと新しいコピーは98.8%同じです(166行中2行が変更されました)。私の理解は、明示的に格納するのではなくリネーム操作を推測するため、gitはファイルを追跡できなければならないということです。

私はこれを修正するために何かできますか?

+0

推測:〜/ projects/system/runtime/srcの代わりに〜/ projects /内のコマンドを実行すると機能しますか? – Douglas

+0

いいえ、私は同じ結果を得ます。 (とにかくあなたがどんなフォルダにも入れられるようにするのは大丈夫だと思う...) –

+0

それは私に考えを与えてくれた。コメントありがとう! –

答えて

11

は自分の質問に答える.. git log -M --summaryと私の名前の変更を参照しています。 (git log --followはまだかかわらず、私のために動作しません。)

はまず、名前の変更のための--summaryログがコミットファイルの古い名前でdelete行が含まれています。だから見つけやすいなら、そこから古い名前とgit logを見つけることができます。

大きなコミットの一部であり、そのために少し気になることがありました。この状況が私の心配の1つでした。git blame -Cは、最初の名前変更後リビジョンでファイルの新しい名前とともに使用できます。おそらく、元のファイルから線が残っているでしょう! - だからgitはソースを見つけ、古いファイル名(と良い測定のためのコミットハッシュ)を表示する必要があります。その後、git logでトレイルをピックアップすることができます。

ファイルの履歴に何らかの関心がある場合(何らかの理由で)、それは比較的簡単に行うことができるようです。私は印象を得るがgitはあなたがそれを適切に使用することを好むだろう。

+6

実際に名前を変更するには-Mオプションが必要だと思います –

+0

ちょうど同じ問題があって、作業ディレクトリが 'git log --follow .'になっていることに気づいた。' git log --follow path/to/new/dir'は、古い場所と新しい場所の共通の親ディレクトリから実行されます。 – akraf

23

まあ、私はまさに私の問題を解決していない場合でも、私の懸念を和らげるために管理しておりますので、

4
git log --follow ./path/to/file 

から学びます。