特定のファイルを変更したすべてのコミットを一覧表示するにはどうすればよいですか?


803

特定のファイルを変更したすべてのコミットを一覧表示する方法はありますか?


1
単一のブランチにわたるファイルへの変更を探していますか。すべてのローカルブランチ全体。単一のリモート上のすべてのブランチにわたって。それとも全部?全体として、スクリプトが必要になると思います。
benhorgen

回答:


1083

--follow特定のファイルのための作品

git log --follow -- filename

与えられた他のソリューションとの違い

他のソリューションにはgit log path(なし--follow)が含まれることに注意してください。あなたが例えばの変化を追跡したい場合はそのアプローチは便利であるディレクトリが、ファイルの名前が変更された時につまずきを(したがって使用します--follow filename)。


32
+1 --followは名前の変更を説明するため、これはより堅牢ですgit log -- path
Gabe Moothart 2013

42
--followパスを受け入れることに注意してください。パスはファイルでもディレクトリでもかまいません。後者の場合、再帰的に実行され、そのポイント以下のすべてのファイルへの変更を報告します。(この動作はマンページに記載されておらず、永続的ではない可能性があります。)
StvnW 2014年

5
git log filename?
それと

8
@SaulOrtegaは、git log filenameファイル名の変更に従いません。つまり、そのファイル名(実際のファイルではない)に関するすべてのコミットを表示します。ファイルを作成XY、両方を変更し、次に削除Yして名前XY変更し、さらにそれを変更して、を実行git log Yすると、古いもの Y新しいものの両方のメッセージが表示されます。そして、で、反対、--followそれが命名されたときに、そのファイルについてのコミットを取得しますX し、それが命名されたときY
MarSoft

7
すべてのブランチのすべてのコミットを表示するには、「git log --all filename」を使用します
Lebnik

122

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.

11
ファイルのパスが変更されている場合は機能しません。ジャックラビットの答えはこのケースではうまくいきます。
kwahn 14

1
これは、ログを特定のブランチに制限する必要がある場合に機能します
ams

63

私はこれを注意深く見ていましたが、これらの答えはすべて、すべてのブランチにわたるすべてのコミットを本当に示しているようには見えません。

これが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

11
これは、誰かが変更を加えたが、変更をコミットした場所を忘れた場合に最適です。
earthmeLon

2
非常に便利。stashコミットも含まれます
Juan AntonioTubío2017年

これが望ましい答えです。問題は、すべてのコミットを見つけることでした。
carl verbiest

--reflogリベース/修正またはその他の方法で破棄されたコミットが含まれていることに注意してください。多分それは明白なはずですが、私はこれを使っgit logてみて、なぜコミットが重複しているように見えるのかを理解しようとしました!
Soren Bjornstad

43

以下のコマンドを使用して、特定のファイルのコミットを取得します。

git log -p filename

8
彼はコミットのリストを望んでいたので、これは質問に正確に答えるものではないことを理解していますが、これはゴールドであり、私のファイルに含まれています。
zkent 2016年

3
現在チェックアウトされているブランチにファイルが存在しない場合、これはまったく機能しません。のようにブランチを追加するgit log -p mybranch -- filenameか、単にを使用git log --all -- filenameしてすべてのブランチを検索できます。
Soren Bjornstad

37

それはのように単純でなければなりませんgit log <somepath>。マンページをチェック(git-log(1))を。

個人的にgit log --stat <path>は、ファイルへの各コミットの影響を確認できるように使用するのが好きです。


9
または-p、完全な差分を見たい場合でも、行数が変更されているだけではありません。
Cascabel

確かに、しかし、ほとんどのファイルが一生にわたって何度も変更されていることを考えると、かなりうるさいです。これまでにファイルに影響を与えたすべてのコミットの完全な差分を見たくありません。私は通常、特定のものを探しているので、影響だけのログを取得してから、git show重要なように見える特定のコミットを取得できます。
rfunduk 2010

git log --stat --follow-* .html =>コミットごとに1つのファイルのみが含まれるコミットのリストを出力します。非常に素晴らしい!
Sergio Belevskij

18

または(Git 1.8.4以降)、ファイルの特定の部分を変更したすべてのコミットを取得することもできます。これは、開始行と終了行の番号を渡すことで取得できます。

返される結果は、この特定の部分を変更したコミットのリストになります。コマンドは次のようになります。

git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>

どこにupperLimitあるstart_line_numberlowerLimitありますending_line_number

詳細情報-https://www.techpurohit.com/list-some-useful-git-commands


17

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、単一のファイルに対してのみ機能することです。


4
--followディレクトリの場合もある単一パスに対して機能します。ディレクトリを渡すと、再帰的に実行され、そのポイントより下のすべてのファイルへの変更が報告されます。
StvnW 2014年

10

以前のコミットで削除されたファイル追跡しようとしている場合

git log --follow -- filename

3
以下のためのgit初心者:使用すると、git log -p --follow -- filename同様の変更を表示します。また、「ファイル名」は、ファイル、ディレクトリ、またはサブモジュールにすることができます。
ティーノ2016年

8

ファイルを変更したすべてのコミットを表示したい場合は、すべてのブランチで、次を使用します。

git log --follow --all <filepath>

8

あなたはすべてのコミットを探したい場合filenameしないことにより filepath、以下を使用します。

git log --all -- '*.wmv'

6

(ファイル自体への変更だけでなく)特定のファイルを変更したコミットで行われたすべての変更を確認したい場合は、次のように渡すことができます--full-diff

git log -p --full-diff [branch] -- <path>

また[branch]
はなし

1
@Anentropic角括弧は、引数がオプションであることを示しているはずです。
キュービック

それは私が必要とするすべてです、それは完全な変更を示し、マージからのいくつかの変更を含みます。
ThanhLD 2018

5

すべてのブランチにgit log --all <filename>影響を与えるコミットを表示するために使用します<filename>


4
gitk <path_to_filename>

パッケージ「gitk」がすでにインストールされていると仮定します。

インストールされていない場合は、次のようにします。

sudo apt-get install gitk

そして、上記のコマンドを試してください。これはLinux用です... LinuxユーザーがGUIを必要とする場合に役立ちます。


Windowsユーザーの場合、gitkGit for Windowsにバンドルされていることに注意してください。
Soren Bjornstad

2

コミットハッシュのリストを取得するには git rev-list

 git rev-list HEAD <filename>

出力:

b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d

これは、5つのコミットがこのファイルに触れたことを意味します。それは時系列の逆なので、リストの最初のコミットがb7c4f0d7最新のものです。


1

Linuxでは、これにgitkを使用できます。

「sudo apt-get install git-gui gitk」を使用してインストールできます。「gitk <Filename>」によって特定のファイルのコミットを確認するために使用できます。


1
# 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>

参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.