回答:
--follow
特定のファイルのための作品
git log --follow -- filename
与えられた他のソリューションとの違い
他のソリューションにはgit log path
(なし--follow
)が含まれることに注意してください。あなたが例えばの変化を追跡したい場合はそのアプローチは便利であるディレクトリが、ファイルの名前が変更された時につまずきを(したがって使用します--follow filename
)。
--follow
は名前の変更を説明するため、これはより堅牢ですgit log -- path
--follow
はパスを受け入れることに注意してください。パスはファイルでもディレクトリでもかまいません。後者の場合、再帰的に実行され、そのポイント以下のすべてのファイルへの変更を報告します。(この動作はマンページに記載されておらず、永続的ではない可能性があります。)
git log filename?
git log filename
ファイル名の変更に従いません。つまり、そのファイル名(実際のファイルではない)に関するすべてのコミットを表示します。ファイルを作成X
しY
、両方を変更し、次に削除Y
して名前X
をY
変更し、さらにそれを変更して、を実行git log Y
すると、古いもの Y
と新しいものの両方のメッセージが表示されます。そして、で、反対、--follow
それが命名されたときに、そのファイルについてのコミットを取得しますX
し、それが命名されたときY
。
git log path
あなたがしたいことをする必要があります。git log
男から:
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
私はこれを注意深く見ていましたが、これらの答えはすべて、すべてのブランチにわたるすべてのコミットを本当に示しているようには見えません。
これがgitkの編集ビューオプションをいじくり回して思いついたものです。これは、ブランチ、ローカル、reflog、リモートに関係なく、ファイルのすべてのコミットを示しています。
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
それはまたと働きgit log
ます:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
--reflog
リベース/修正またはその他の方法で破棄されたコミットが含まれていることに注意してください。多分それは明白なはずですが、私はこれを使っgit log
てみて、なぜコミットが重複しているように見えるのかを理解しようとしました!
以下のコマンドを使用して、特定のファイルのコミットを取得します。
git log -p filename
git log -p mybranch -- filename
か、単にを使用git log --all -- filename
してすべてのブランチを検索できます。
それはのように単純でなければなりませんgit log <somepath>
。マンページをチェック(git-log(1)
)を。
個人的にgit log --stat <path>
は、ファイルへの各コミットの影響を確認できるように使用するのが好きです。
-p
、完全な差分を見たい場合でも、行数が変更されているだけではありません。
git show
重要なように見える特定のコミットを取得できます。
または(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
jackrabb1tが指摘したように、--follow
名前の変更/移動を超えて履歴をリストし続けるため、より堅牢です。そのため、現在同じパスにないファイルや、さまざまなコミットで名前が変更されたファイルを探している場合、-followはそれを追跡します。
名前/パスの変更を視覚化したい場合は、これがより良いオプションになることがあります。
git log --follow --name-status -- <path>
しかし、重要なものだけを含むよりコンパクトなリストが必要な場合:
git log --follow --name-status --format='%H' -- <path>
あるいは
git log --follow --name-only --format='%H' -- <path>
欠点は--follow
、単一のファイルに対してのみ機能することです。
--follow
ディレクトリの場合もある単一パスに対して機能します。ディレクトリを渡すと、再帰的に実行され、そのポイントより下のすべてのファイルへの変更が報告されます。
ファイルを変更したすべてのコミットを表示したい場合は、すべてのブランチで、次を使用します。
git log --follow --all <filepath>
(ファイル自体への変更だけでなく)特定のファイルを変更したコミットで行われたすべての変更を確認したい場合は、次のように渡すことができます--full-diff
。
git log -p --full-diff [branch] -- <path>
[branch]
gitk <path_to_filename>
パッケージ「gitk」がすでにインストールされていると仮定します。
インストールされていない場合は、次のようにします。
sudo apt-get install gitk
そして、上記のコマンドを試してください。これはLinux用です... LinuxユーザーがGUIを必要とする場合に役立ちます。
gitk
Git for Windowsにバンドルされていることに注意してください。
コミットハッシュのリストを取得するには git rev-list
git rev-list HEAD <filename>
出力:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
これは、5つのコミットがこのファイルに触れたことを意味します。それは時系列の逆なので、リストの最初のコミットがb7c4f0d7
最新のものです。
Linuxでは、これにgitkを使用できます。
「sudo apt-get install git-gui gitk」を使用してインストールできます。「gitk <Filename>」によって特定のファイルのコミットを確認するために使用できます。
# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>
# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>