Gitで個々のファイルの変更履歴を表示するにはどうすればよいですか?
私は限り:
git log -- [filename]
これはファイルのコミット履歴を示していますが、各ファイルの変更内容を取得するにはどうすればよいですか?
私はMS SourceSafeからの移行を試みていますが、それは以前は単純でしたright-click
→ show history
。
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
オプションにより、変更ごとに差分が含まれるようになります。
--follow
ファイルの名前変更を確認します(2.)-p
ファイルがどのように変更されるかを確認します(3.)コマンドラインのみです。
--
が追加されたことに気づきましたが、これがそれを最高にする理由がわかりませんか?それは何をしているのですか?
--
オプションは、Gitにオプションの最後に達したこと、およびその後に続くもの--
はすべて引数として扱う必要があることを伝えます。このためgit log
、ダッシュで始まるパス名がある場合にのみ、違いが生じます。:あなたは「--follow」不幸な名前があるファイルの歴史を知りたいと思ったと言うgit log --follow -p -- --follow
--
すべてのrevision
名前から保護できるので便利です。たとえば:あなたはブランチと名前のファイルの両方を持っていた場合foo
、git log -p foo
アップにgitのログ履歴を示すだろうfoo
ための歴史、ないファイル foo
。しかし、@ DanMouldingは正しいです。--follow
コマンドは引数として単一のファイル名のみを取るので、にすることはできないため、これはそれほど必要ではありませんrevision
。私はちょうどそれを学びました。たぶん、あなたはそれをあなたの答えから除外するのが正しかったでしょう。よく分かりません。
テキストベースのままにする場合は、tigを使用することをお勧めします。
クイックインストール:
# apt-get install tig
$ brew install tig
これを使用して、単一のファイルの履歴を表示します。tig [filename]
または、詳細なリポジトリの履歴を参照します。tig
似てgitk
いますが、テキストベースです。端末の色に対応!
tig -- path/to/specific/file
git whatchanged -p filename
git log -p filename
この場合もと同等です。
また、ファイル内の特定のコード行がで変更された時期も確認できますgit blame filename
。これにより、ファイル内のすべての行の短いコミットID、作成者、タイムスタンプ、および完全なコード行が出力されます。これは、バグを発見し、それがいつ導入されたのか(または誰が原因であるのか)を知りたい場合に非常に役立ちます。
filename
、コマンドではオプションではありませんgit blame filename
。
SourceTreeを使用してリポジトリを視覚化する場合(無料で非常に優れています)、ファイルを右クリックして[選択したログ]を選択できます。
表示(下)はgitkやリストされている他のほとんどのオプションよりもずっと使いやすいです。残念ながら(現時点では)コマンドラインからこのビューを起動する簡単な方法はありません。SourceTreeのCLIは現在リポジトリを開いているだけです。
それらを読んで少し遊んだ後の他の答えの要約:
通常のコマンドラインコマンドは
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'
入力gdf dir
するだけで、サブディレクトリ内のすべてのフォーカスされた履歴を取得できdir
ます。
--all
すべてのブランチ用で、残りは
このエイリアスを.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の出力とほとんど同じです。楽しい。
git lg -p filename
-検索されたファイルの美しい差分を返します。
最近、私はtig
それを発見し、非常に便利だと思いました。AまたはBを実行したい場合もありますが、ほとんどの場合、それはかなり適切です。
あなたのケースでtig <filename>
は、あなたが探しているものかもしれません。
私はまさにこの目的のためにgit-playbackを書きました
pip install git-playback
git playback [filename]
これには、コマンドライン(などgit log -p
)に結果を表示すると同時に、矢印キー(などgitk
)を使用して各コミットをステップ実行できるという利点があります。
ファイルの特定の部分を変更したコミットをリストするこれを試すこともできます(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拡張機能を使用すると、ファイルがまだ存在していた履歴のポイントに移動し(削除されている場合は、それ以外の場合は単にHEADに移動しFile tree
ます)、タブに切り替え、ファイルを右クリックしてを選択しますFile history
。
デフォルトでは、ファイル名を変更して名前が変更され、Blame
タブでは特定のリビジョンの名前を確認できます。
削除リビジョンをクリックしたときfatal: Not a valid object name
にView
タブに表示されるように、いくつかのマイナーな落とし穴がありますが、それでも問題ありません。:-)
リポジトリメニューでgit GUI(Windows)を使用している場合は、「マスターの履歴を視覚化」を使用できます。上部ペインのコミットと右下のファイルを強調表示すると、左下にそのコミットの差分が表示されます。
TortoiseGitを使用している場合は、ファイルを右クリックして実行できますTortoiseGit --> Show Log
。ポップアップするウィンドウで、次のことを確認します。
' Show Whole Project
'オプションはチェックされていません。
' All Branches
'オプションがチェックされています。
git diff -U <filename>
統一された差分を与えます。
赤と緑に着色されているはずです。そうでない場合は、git config color.ui auto
最初に実行します。
gitプラグインでEclipseを使用している場合、履歴との優れた比較ビューがあります。ファイルを右クリックして、「compare with」=>「history」を選択します
私はおそらく、これが始まったときのOPの場所について、vimdiffでgit difftoolを使用して、特定のコミットから始まるリポジトリ内のファイルへの変更を確認できる簡単なものを探しています。私が見つけた答えにあまり満足していなかったので、このgit inc remental rep orter(gitincrep)スクリプトを一緒に投げて、それは私にとって便利でした:
#!/usr/bin/env bash
STARTWITH="${1:-}"
shift 1
DFILES=( "$@" )
RunDiff()
{
GIT1=$1
GIT2=$2
shift 2
if [ "$(git diff $GIT1 $GIT2 "$@")" ]
then
git log ${GIT1}..${GIT2}
git difftool --tool=vimdiff $GIT1 $GIT2 "$@"
fi
}
OLDVERS=""
RUNDIFF=""
for NEWVERS in $(git log --format=format:%h --reverse)
do
if [ "$RUNDIFF" ]
then
RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
elif [ "$OLDVERS" ]
then
if [ "$NEWVERS" = "${STARTWITH:=${NEWVERS}}" ]
then
RUNDIFF=true
RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
fi
fi
OLDVERS=$NEWVERS
done
引数なしで呼び出されると、これはリポジトリ履歴の最初から開始されます。それ以外の場合は、提供された任意の短縮されたコミットハッシュで開始され、現在に進みます。いつでもctrl-Cで終了できます。最初の引数より後の引数は、それらの引数の中でリストされたファイルのみを含むように差分レポートを制限します(これはOPが望んだものであり、小さなプロジェクトを除くすべてに推奨します)。あなたが特定のファイルへの変更をチェックしている場合や、最初から開始したい、あなたはARG1に空の文字列を提供する必要があります。vimユーザーでない場合は、vimdiffをお好みのdiffツールに置き換えることができます。
動作は、関連する変更が見つかったときにコミットコメントを出力し、変更されたファイルごとにvimdiff実行の提供を開始することです(これはgit difftoolの動作ですが、ここで機能します)。
このアプローチはおそらく素朴なものですが、ここおよび関連する投稿で多くのソリューションを検討すると、多くの場合、独自の学習曲線を持つインターフェイスを使用して、管理者アクセス権がないシステムに新しいツールをインストールする必要がありました。上記のスクリプトは、何も処理せずに、私が望んでいたことを実行しました。より洗練されたものが必要な場合は、ここで多くの優れた提案を検討しますが、これはOPに直接応答すると思います。