2つのコミット間で変更されたファイル名のみをリストする方法は?


回答:


2666
git diff --name-only SHA1 SHA2

コミットを識別するために十分なSHAを含めるだけでよい場合。たとえば、次のこともできます

git diff --name-only HEAD~10 HEAD~5

最新の10番目のコミットと5番目のコミット(またはそれ以降)の違いを確認します。


152
これはgit showでも機能します。git show --name-only SHA1
August Lilleaas 2009年

78
git diff --name-status [TAG|SHA1]は、ファイルに対してどのような操作が行われたかを示しています
リコンボット'28 / 09/28

2
比較したい正確なコミットについては、git diff --name-only HEAD @ {3} HEAD @ {0}を使用することもできます。
b01

7
@AugustLilleaasが実際にshowを使用すると、2つの特定のコミットのみが表示されます。これらの2つの間にコミットがある場合、それらは
省略

4
下記のように、git diff --name-status追加されたファイルを表示したくないようです。@sschuberthが指摘しましたがgit show、これは私には適切に機能しているようです git show --pretty=format: --name-status。実行するだけでgit show --name-status、もう少し多くの情報が得られますが、それでも見栄えがよく、密度が高くなります...これが私の新しいgotoコマンドになります;)
travc

417
git diff --name-status [SHA1 [SHA2]]

--name-onlyに似ていますが、ファイルに何が起こったか(変更、削除、追加...)を示す単純なプレフィックスが付きます。

git log --name-status --oneline [SHA1..SHA2]

も同様ですが、コミットメッセージの後にコミットがリストされるため、ファイルがいつ変更されたかを確認できます。

  • 特定のファイル/フォルダーで何が起こったかに興味がある場合は-- <filename> [<filename>...]git logバージョンに追加できます。

  • 単一のコミットで何が起こったかを確認したい場合は、SHA1と呼び、次に
    git log --name-status --oneline [SHA1^..SHA1]

ファイルステータスフラグ:
M変更-ファイルが変更されました
Cコピー-編集-ファイルがコピーされ、変更されました
R名前変更-編集-ファイルは名前が変更され変更されました
A追加-ファイルが追加されました
D削除されました-ファイルが削除されました
Uマージされません-マージ後のファイルの競合


私はたまたまgit diff --name-statusと言いましたが、それは「追加されたファイル」を与えました。
芸術家2013

1
git logの場合、SHA1..SHA2のようにSHAの間に2つのドットが必要で、2番目のSHAはオプションではないため、次のようになります。git log --name-status --oneline [SHA1 .. SHA2]
twasbrillig 2014年

特定のファイル/特定のファイルタイプを除外する方法はありますか?
2014年

3
--relative[=<path>]オプションでは、私はよく分からない、あなたを助けるかもしれません。それ以外の場合は常に| erep -v '(.tmp|.foo|.dontwant)$'...
artfulrobot

80

誰もスイッチについて言及していないようです--stat

$ git diff --stat HEAD~5 HEAD
 .../java/org/apache/calcite/rex/RexSimplify.java   | 50 +++++++++++++++++-----
 .../apache/calcite/sql/fun/SqlTrimFunction.java    |  2 +-
 .../apache/calcite/sql2rel/SqlToRelConverter.java  | 16 +++++++
 .../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
 .../org/apache/calcite/test/RexProgramTest.java    | 24 +++++++++++
 .../apache/calcite/test/SqlToRelConverterTest.java |  8 ++++
 .../apache/calcite/test/SqlToRelConverterTest.xml  | 15 +++++++
 pom.xml                                            |  2 +-
 .../apache/calcite/adapter/spark/SparkRules.java   |  7 +--
 9 files changed, 117 insertions(+), 26 deletions(-)

もあります --numstat

$ git diff --numstat HEAD~5 HEAD
40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1       1       pom.xml
4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

そして --shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)

4
受け入れられた答えは正しいですが、これは非常に便利で、もう少し詳しい情報を提供します。ありがとう!
kontur

2
差分統計が含まれているため、これはより有用な回答であることに同意します。
インターネット

52

しかし、ブランチと別のブランチ(たとえばorigin / master)を持つ共通の祖先との間でファイルが変更されたことを確認するには、次のようにします。

git diff --name-only `git merge-base origin/master HEAD`

1
これは本当に役に立ちました!git diffstatus master上記のきっかけとなる、単純に言っても、似たようなものになりたいと思います。
oma

3
またはgit show --pretty=format: --name-only origin/master..
sschuberth 2014

あなたはそれをgitエイリアスにすることができないかもしれませんが、あなたは間違いなくそれをあなたの.bashrcに入れることができます。
フレッド

3
またはさらに簡単です:git diff --name-only HEAD...master(3つの点に注意してください)。詳しくはこちらをご覧ください
ostrokach 16

1
ほとんど正解のようです!Simple git diff --name-only master..branchはgithub PRリストに対応していません。この方法はより正確です。しかし、とにかく私はgithub PRで173のチャンドされたファイル対171を持っています。(merge-base私には228対171はありません)
x'ES

21

2つのブランチ間で変更されたファイルを表示したい場合は、@ artfulrobotの回答を補足するには:

git diff --name-status mybranch..myotherbranch

優先順位に注意してください。新しいブランチを最初に配置すると、ファイルは追加ではなく削除されたものとして表示されます。

を追加すると、grepさらに細かく調整できます。

git diff --name-status mybranch..myotherbranch | grep "A\t"

次に、で追加されmyotherbranchたファイルのみが表示されます。


4
正規表現はいいですし、実際にほとんど何でもできます。ただし、この場合、--diff-filterこの機能をネイティブに提供するものもあります。つまり、誤った結果(誤検知など)の可能性が低くなります
Jasper

8

以下にエイリアスをに追加して~/.bash_profile実行しますsource ~/.bash_profile。いつでも、最後のコミットで更新されたファイルを、showfilesgitリポジトリから実行する必要があります。

alias showfiles='git show --pretty="format:" --name-only'

2
またはgit config --global alias.showfiles 'show --pretty="format:" --name-only'作るためにgit showfiles
cgmb 2017年


5

また、最後のコミットとその前のコミットの間で変更されたファイルを見たいだけの場合にも注意してください。これはうまくいきます:git show --name-only


3

git log --pretty = oneline> C:\ filename.logを使用します

変更されたファイルの名前である1行(--pretty = oneline)のみをログに記録します。また、すべての詳細を出力ファイルに記録します。


git log --pretty=onelinegit 2.10.1を使用してSHAとコミットメッセージのみを提供します
damd

3

artfulrobotが彼の答えで言ったように:

git diff --name-status [SHA1 [SHA2]]

私の例:

git diff --name-status 78a09k12067c24d8f117886c4723ccf111af4997 
4b95d595812211553070046bf2ebd807c0862cca
M       views/layouts/default.ctp
M       webroot/css/theme.css
A       webroot/img/theme/logo.png

3

Javaファイルのみに集中する必要がある人のために、これが私の解決策です:

 git diff --name-status SHA1 SHA2 | grep '\.java$'

1

以下は私にとってうまくいきます:

$ git show --name-only --format=tformat: SHA1..SHA2

単一のコミットでも使用できます。

git show --name-only --format=tformat: SHA1

これは、Jenkinsでの使用に便利です。changeSetSHAのリストが提供されており、それらを繰り返し処理して、変更されたファイルを確認します。

これは上記の回答のいくつかに似ていますが、使用するのtformat:ではなく、format:コミット間のセパレータースペースを削除します。


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