97

を使用していくつかのファイルの名前を変更しgit mv、使用しgit stash、HEADを(変更せずに)簡単に確認してgit stash popから、全体を元に戻しました。私の動きはコミットリストから消えていたので、私はそれらをやり直し、git rmgitが名前の変更を見つけたと主張するコミットメッセージは名前の変更でした。だから私はそれ以上考えませんでした。

しかし、今、コミット後、移動されたファイルの履歴を取得できません!問題のコミットについて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%

私は現在、これらの移動されたファイルの1つの履歴を取得しようとしているので、古いバージョンを見ることができますが、あまり有用なものは何も得られません。

~/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%

ですから、今回は完全に行き詰まっているわけではありませんが、いつもこういうことをしなくてはいけないのではないでしょうか。(私は、彼らの生活の中で少なくとも一度は移動するかなりの数のファイルがあることを期待しています。)

私は何か間違ったことをしていますか?ファイルの古いコピーと新しいコピーは98.8%同じです(166のうち2行が変更されています)。私の理解では、この場合、gitはファイルを明示的に保存するのではなく名前変更操作を推測するため、ファイルを追跡できるはずです。ファイルは十分に類似しているため、同じと見なす必要があります。

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

4

4 に答える 4

139

git log --followファイルを試してみてください。ここから学びますgitでファイルを移動/名前変更して履歴を維持することは可能ですか?

于 2011-11-16T06:43:29.850 に答える
30

ええと、私は自分の名前をgit log -M --summary..

于 2010-12-09T20:47:25.640 に答える
19

問題を正確に解決していなくても、懸念を和らげることができたので、自分の質問に答えます。(git log --followそれでも私にはうまくいきません。)

まず、--summary名前変更コミットのログにはdelete、ファイルの古い名前の行が含まれています。したがって、簡単に見つけられる場合は、その古い名前を見つけることができますgit log

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

したがって、(何らかの理由で)1つの単位としてのファイルの履歴にある程度関心がある場合は、比較的簡単に実行できるように思われます。私は印象を受けますが、gitはあなたがそれを適切に使用したことを好むでしょう。

于 2010-12-13T22:19:20.560 に答える
13
git log --follow ./path/to/file

これがあなたが探しているものだと思います。

于 2016-04-12T00:58:30.060 に答える