Gitで個々のファイルの変更履歴、変更点の詳細を確認するにはどうすればよいですか?
私は限ります:
git log -- [filename]
これはファイルのコミット履歴を示していますが、どのようにして各ファイルの変更内容を確認することができますか?
私はMS SourceSafeから移行しようとしていますが、それは以前は単純なright-click
→show history
でした。
このために私は使用します:
gitk [filename]
または過去のファイル名の変更を追跡する
gitk --follow [filename]
あなたが使用することができます
git log -p filename
gitに各ログエントリのパッチを生成させるため。
見る
git help log
より多くのオプションのために - それは実際にたくさんのいいことをすることができます:)特定のコミットのための差分だけを得るためにあなたはできる
git show HEAD
または識別子によるその他の改訂。または使用
gitk
変更を視覚的に閲覧するため。
git log --follow -p -- path-to-file
これはファイルの 全体 の履歴を表示します(名前の変更を超えた履歴と各変更の差分を含む)。
言い換えれば、bar
という名前のファイルがかつてfoo
という名前だった場合、git log -p bar
(--follow
オプションなし)は、ファイルの名前が変更された時点までの履歴のみを表示します。 foo
として。 git log --follow -p bar
を使用すると、ファイルがfoo
として知られていたときのファイルへのすべての変更を含む、ファイルの全履歴を表示します。 -p
オプションを使用すると、変更ごとに差分が確実に含まれます。
テキストベースのままにしたい場合は、tigを使用します。
クイックインストール
# apt-get install tig
$ brew install tig
単一ファイルの履歴を表示するために使用します。tig [filename]
または、詳細なレポ履歴を閲覧する:tig
gitk
と似ていますが、テキストベースです。端末で色をサポート!
この場合、 git whatchanged -p filename
も git log -p filename
と同等です。
ファイル内の特定のコード行が git blame filename
で変更されたこともわかります。これは、短いコミットID、作者、タイムスタンプ、そしてファイル内のすべての行のコードの完全な行を出力します。これは、バグを見つけて、それがいつ導入されたのか(またはそれが誰のせいであるのか)知りたい場合に非常に役立ちます。
SourceTreeを使ってあなたのリポジトリを視覚化するなら(それは無料でとても良いです)、ファイルを右クリックして Log Selected を選択できます。
下の表示は、gitkや他のほとんどのオプションよりもはるかにわかりやすいものです。残念ながら(現時点では)コマンドラインからこのビューを起動する簡単な方法はありません - SourceTreeのCLIは現在リポジトリを開くだけです。
ファイルの各行を最後に変更したリビジョンと作成者を表示するには、次の手順を実行します。
git blame filename
あるいは、あなたが強力な責めのGUIを使いたいならば:
git gui blame filename
それらを読んで少し遊んだ後の他の答えの要約:
通常のコマンドラインコマンドは
git log --follow --all -p dir/file.c
しかし、gitk(gui)またはtig(text-ui)のいずれかを使用して、人間が判読できるようにすることもできます。
gitk --follow --all -p dir/file.c
tig --follow --all -p dir/file.c
Debian/ubuntuでは、これらの素敵なツールのためのインストールコマンドは予想通りです:
Sudo apt-get install gitk tig
そして私は現在使用しています:
alias gdf='gitk --follow --all -p'
そのため、サブディレクトリdir
内のすべての履歴を集中的に取得するには、gdf dir
と入力するだけです。
このエイリアスを.gitconfigに追加してください。
[alias]
lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative
そして、このようなコマンドを使います。
> git lg
> git lg -- filename
出力はgitkの出力とほぼ同じになります。楽しい。
最近私はtig
を発見し、それが非常に役に立つことがわかりました。私はそれがAまたはBをしたいのですがいくつかのケースがありますが、ほとんどの場合それはかなりきれいです。
あなたの場合は、tig <filename>
があなたが探しているものかもしれません。
私は git-playback と書きました。
pip install git-playback
git playback [filename]
これには、コマンドラインで結果を表示する(git log -p
など)と同時に、矢印キーを使用して各コミットを順に実行できるようにする(gitk
など)という利点があります。
ファイルの全履歴を見たい場合は、を含む on その他すべてのブランチで次のようにします。
gitk --all <filename>
リポジトリメニューのgit GUI(Windows)を使用している場合は、「視覚化マスタの履歴」を使用できます。上部ペインのコミットと右下のファイルをハイライトすると、左下にそのコミットの差分が表示されます。
優れた Git Extensions を使えば、ファイルがまだ存在していた履歴のある場所(削除されている場合はHEADに移動します)に行き、File tree
タブに切り替え、ファイルを右クリックしてFile history
を選択してください。
デフォルトでは、ファイル名の変更が行われ、Blame
タブで特定のリビジョンの名前を確認できます。
削除リビジョンをクリックしたときにView
タブにfatal: Not a valid object name
を表示するなど、ちょっとした問題がいくつかありますが、それでも問題ありません。 :-)
SmartGit :
ファイルの特定の部分を変更したコミットを一覧表示することもできます(Git 1.8.4で実装)。
返される結果は、この特定の部分を変更したコミットのリストです。コマンド:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
ここで、upperLimitはファイルのstart_line_number、lowerLimitはファイルのending_line_numberです。
詳細は https://www.techpurohit.com/list-some-useful-git-commands にあります。
私が探していたのは、このスレッドではなかったのですが、コミットしようとしていたファイルの変更を確認することです。すなわち.
git diff --cached
TortoiseGitを使用している場合は、ファイルを右クリックしてTortoiseGit --> Show Log
を実行できるはずです。ポップアップウィンドウで、次のことを確認してください。
'Show Whole Project
'オプションはチェックされていません。
'All Branches
'オプションがチェックされています。
git diff -U <filename>
はあなたに統一された差分を与えます。
それは赤と緑に着色されるべきです。そうでない場合は、最初にgit config color.ui auto
を実行してください。
あなたがgitプラグインと一緒にEclipseを使っているなら、それは歴史との優れた比較ビューを持ちます。ファイルを右クリックして[比較対象] => [履歴]を選択します。
GitLens と一緒にvscodeを使用することができます。これは非常に強力なツールです。 GitLensをインストールした後、GitLensタブに行き、FILE HISTORY
を選択すればそれを閲覧することができます。