web-dev-qa-db-ja.com

ファイルの履歴を表示しますか?

可能性のある複製:
Gitバージョン管理を使用してファイルの変更履歴を表示

特定のファイルの履歴をステップスルーしたい場合があります。以前はP4Vを使用していましたが、これは非常に迅速で直感的でした。

  1. ファイルを右クリックして、履歴を選択します。
  2. 日付をスクロールして、thatファイルのthat日付の正確な変更点のNice diffを確認します。シンプル。

これをgitに切り替えることは今や大変な作業です。

  1. 「gitログファイル名」
  2. 履歴を見て日付を選択し、ハッシュをコピーします
  3. 「git diff hash」
  4. 興味のあるファイルで変更された内容の差分をスクロールします。
  5. いいえ、そうではありません。別の日付を試してみましょう-ステップ2に戻り、すすぎ、繰り返します。

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

これらはすべて、手動でコマンドを実行する必要性を取り除きますが、ワークフローはこれと同じです。ファイルの履歴を表示します。コミットの表示。多数の無関係なファイルの差分を検索します。それは遅くて反復的です。

すべてのデータはレポジトリにあるため、この単純な一般的なユースケースをこれ以上合理化できない理由はありません。

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

提案をありがとう。

133
Chris

これを試しましたか:

gitk path/to/file
127
Pierre Mage

Git logを使用して、検索中に差分を表示できます。

git log -p -- path/to/file
139
ralphtheninja

git log -pは、選択されたすべてのコミットに対してパッチ(diff)を生成します。単一のファイルの場合は、git log --follow -p $fileを使用します。

特定の変更を探している場合は、探しているものが変更された場所が見つかるまでコミット数を半分に分割することにより、log(n)ビューで 変更を見つけるgit bisectを使用します。

また、git blameを使用して、それが何であるかを知っている場合は、問題の 行の変更に従う を使用して履歴を振り返ることを検討してください。このコマンドは、特定の行に影響する最新のリビジョンを表示します。誰かがそれを時間の経過とともに微調整した場合、いくつかのバージョンに戻って何かが導入された最初の変更を見つける必要がありますが、それは良いスタートを切ることができます。

最後に、GUIとしてのgitkパッチをすぐに表示します クリックしたコミットに対して。

例 enter image description here

45
Jeff Ferland

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

これにはgit blameを使用できます。各行にSHA1と変更された日付の注釈が付けられます。 git blameは、特定の行がいつ削除されたか、または興味がある場合はどこに移動されたかを通知することもできます。

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

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

特定のワークフローを実行する方法については考えず、必要な情報をより多く考えようとすると、多くのワークフローが(私の意見では)はるかに単純で高速になります。

10
LiKao