2012-03-21 12 views
102

可能性の重複:
View the change history of a file using Git versioningGit - ファイルの履歴を表示しますか?

時々私は、特定のファイルの履歴をステップにしたいです。これまではP4Vを使用していましたが、これは非常に迅速かつ直感的でした。

  1. ファイルを右クリックして履歴を選択します。
  2. の内容がのファイルに変更された日付をスクロールして表示します。シンプル。

これはgitの作業になりました。

  1. 「gitのログファイル名」
  2. 歴史を見て、日付を選択し、私が興味を持っていたファイルに変更もののための差分によるコピーハッシュ
  3. 「Gitの差分ハッシュ」
  4. スクロール
  5. いいえ、そうではありません。別の日付を試してみましょう。手順2に戻り、すすぎ、繰り返します。

私はSOを検索しましたが、一般的に推奨されるguis:github、gitk、gitg、git-guiのいくつかを試しました。

これらはすべて手動でコマンドを実行する必要がなくなりますが、ワークフローはこれと同じです。ファイルの履歴を表示する。ビューコミット。無関係なファイルのdiffを検索します。それは遅く、繰り返します。

すべてのデータはレポになっていますので、この単純な一般的な使用例はより合理化できませんでした。

誰かがこれを行うツールを推奨できますか、コマンドラインを使って私がしたいことをより効率的に行う方法をお勧めしますか?

ありがとうございます。検索中

+2

私はあなたがこれを望んでいるかどうかわかりませんが、あなたの原因のために 'git diff --stat'または' git diff filename'ヘルプをしていますか? – uday

答えて

102

は、あなたがこのみました:

gitk path/to/file 
+0

パス/トゥ/ファイルに最後にコミットされたものを表示しているようです – Chris

+1

最後のコミットだけでなく、コミットや差分を含むパス/ to /ファイルのgitkインターフェイスが表示されます。 –

+1

実際、これは私が必要とするものです - タイムライン全体がpath/to/fileの方向に向いています。 – Chris

108

あなたは差分を表示するには、gitのログを使用することができます。すべての選択したコミットの

git log -p -- path/to/file 
+1

私はこれが好きです。より良いのは、より親しみやすい方法でdiffを表示するguiだけです。 – Chris

+2

しばらくすると、コンソールの差分が大好きです。色を有効にしてください。 –

+2

私は同意します。 git --config --global color.ui true – ralphtheninja

35

git log -pパッチ(差分)が生成されます。単一のファイルの場合は、git log --follow -p $fileを使用します。

特定の変更を探している場合は、log(n)ビューでgit bisectfind the changeを使用して、コミットの数を半分に分割して、探しているものが変更されるまで探します。

また、それが何であるか分かっていれば、問題のgit blamefollow changes to the lineを使用して履歴を振り返ってみることを検討してください。このコマンドは、特定の行に影響を与える最新のリビジョンを表示します。誰かが時間をかけてそれを微調整した場合、何かが導入された最初の変更を見つけるためにいくつかのバージョンに戻らなければならないかもしれませんが、それはあなたに良いスタートを与えることができます。

最後に、私がクリックする任意のコミットのGUI does show me the patch immediatelyとしてgitk

enter image description here

+0

良い情報、ありがとう。しかし、GUIの場合、これは私が記述していた問題を抱えています - はい、コミット/ファイルの差分を示しています。しかし、ファイル上のすべてのdiffファイルではありません。私はコマンドラインに立ち往生しているように見えます! – Chris

+0

@Chris左上のウィンドウの別のリビジョンをクリックすると、左下のウィンドウに対応するdiffが表示されます。あなたが何か他のことについて話しているなら、あなたは精緻化することができますか? –

+0

これは、gitkパス/ to /ファイルと組み合わせると、そのトリックです! – Chris

6

を私のための主な質問は、あなたが実際に見つけるために何をしようとしていることでしょうか?そのファイルに特定の一連の変更が導入されたことを確認しようとしていますか?

これにはgit blameを使用できます。これは、各行にSHA1と変更された日付を付けることになります。 git blameは、特定の行が削除されたときや、それに興味があるときに移動された場所を通知することもできます。

特定のバグが導入されたときに見つけようとしている場合、git bisectは非常に強力なツールです。 git bisectはあなたの履歴をバイナリ検索します。 git bisect startを使用してバイセクトを開始し、次にバグが存在する場合はコミットをマークする場合はgit bisect bad、バグがない場合はgit bisect goodを使用してコミットをマークすることができます。 gitは2人の間のコミットをチェックアウトし、それが良いか悪いかを尋ねます。通常、間違ったコミットをいくつかの手順で見つけることができます。

私はgitを使っていたので、パッチ履歴を手動で調べて何かを見つける必要はほとんどありませんでした。なぜなら、ほとんどの場合、必要な情報を実際に探す方法を提供するからです。

特定のワークフローをどのように行うのかを考えるのではなく、必要な情報をもっと多く考えると、私の意見ではもっと簡単で高速なワークフローが多くなるでしょう。

+0

私はあなたが正しいと思います。以前のPERFORCEユーザーのように、私は歴史の中をクリックすることで、ファイル内の変化を感じるのに慣れています。私はgit blameのようなツールが特定の行に最後に触れた人を見るのが速いことを知っています - (perforceで見つけるのが苦労していたもの)。しかし、ファイルの歴史をちょっと見れば、ちょっと面倒です。 – Chris

+0

@Chris:はい、これはgitの背後にあるデザインとはたくさん関係しています。基本レベルでは、gitは "ファイル履歴"という概念を持っていません。これはしばしば "gitはファイルを管理せず、コンテンツを管理する"と述べられています。 gitでは、作業ツリー全体が内容であり、履歴はこの完全なディレクトリの履歴です。これは、個々のファイルに履歴を添付する他のSCMとはまったく異なります。 – LiKao

+1

私は理解します、しかし、ちょっと古いhabbitsは、ハードに死ぬ:) – Chris

関連する問題