コミットですべてのファイルをリストする方法は?


2794

私はgit、ハッシュ(SHA1)によって与えられたコミットの一部であり、無関係な情報を含まないすべてのファイルの一覧を適切にフォーマットしたシンプルなコマンドを探しています。

私が試してみました:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

ファイルがリストされていますが、それぞれの不要なdiff情報も含まれています。

git必要なリストのみを提供して、git show出力からの解析を回避できる別のコマンドはありますか?


43
私は少し違うものを探してここに来ました。一連のコミットのためにすべてのファイルが変更され、git log --until 2013-05-21 --pretty="short" --name-only効果を上げて使用したいのですが。
限定的な贖罪

4
以前からのすべての変更を取得するには、このコマンドを使用nまでコミットをmastergit diff-tree --name-status -r @{3} master
赤穂

3
git diff --name-only master-現在のブランチで変更されたすべてのファイルをリストし、マスターブランチと比較します。
Noam Manos

回答:


3764

優先する方法(それは配管コマンドなので、プログラムによるものであるため):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

別の方法(それは磁器のコマンドなので、スクリプトにはあまり好まれません。ユーザー向けのものです)

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • --no-commit-id、コミットID出力を抑​​制します。
  • --pretty引数には、最初に嫌なものを避けるために、空のフォーマット文字列を指定します。
  • --name-only影響を受けた引数のみを示しているファイル名(感謝ハンク)。使用--name-statusあなたは、各ファイルに何が起こったのか確認したい場合は、代わりに(Dは、eleted Mは odified、Aは dded)
  • -r引数には、サブツリーに再帰することです

25
diff-treeルートコミットを確認しても機能しないことに注意してください。
jbranchaud 2013年

327
--name-onlyオプションをに置き換える--name-statusと、より明確な要約が得られます。
Kurt Zhong、

20
ルートコミットで動作させる場合は、-rootフラグを使用します。manページから:「--rootが指定されると、最初のコミットは大きな作成イベントとして表示されます。これは、NULLツリーに対する差分と同等です。」
Chris

24
git log --name-only -n 1 <hash>最後は次のようになりコミット:git log --name-only -n 1 HEAD~1..HEAD
クルト

10
誰かが(私がそうであったように)なぜ最初の方法が「優先される」のか疑問に思っている場合、@ drizztのコメントに戻ります。 git show「磁器」(ユーザー向けであることを意味します)およびgit diff-tree「配管」(スクリプトなどからプログラムで使用されることを意味します)です。(Gitの保守がドロップできるよう経時前者のためのインターフェースが変更される可能性があり--name-only、私は彼らが想像していないものの、希望ユーザビリティの理由から)後者のためのインタフェースが互換性の理由のために可能な限り安定したとして保持される一方、。
killscreen 2015年

237

変更されたファイルのリストを取得したい場合:

git diff-tree --no-commit-id --name-only -r <commit-ish>

コミット内のすべてのファイルのリストを取得したい場合は、

git ls-tree --name-only -r <commit-ish>

1
--name-onlyを指定したls-treeは、1.6.4.4または1.6.3.3では機能しないようです。これはバグだと思いますか?
krosenvold

git ls-tree --name-only HEAD(<commit-ish>パラメーターは必須です。この例ではHEADです)gitバージョン1.6.4.3で動作します
JakubNarębski

2
ここでは、パラメーターの順序が重要であることがわかります。あなたの投稿にあるものは機能しませんが、あなたの応答にあるもの機能します-少なくともあなたが投稿を更新するまで;)
krosenvold

5
パス--no-commit-idSHA1を印刷しないようにするには、次のよう:git diff-tree --no-commit-id --name-only -r <commit-ish>
ジョン・メラー

3
@CoDEmanX:-r/ -tオプションの追加を見逃していませんか?なぜなら、diff-treeは変更されたファイルと追加されたファイルの両方を処理するからです。すべての新しい(追加された)ファイルを一覧表示する場合は、次を使用しますgit diff-tree -r --name-only --no-commit-id --diff-filter=A <commit-ish>
JakubNarębski2015年

226

これはgitk望ましくないことだと思います。その場合は、を試してくださいgit show --name-only <sha>


36
--name-onlyは、私が必要とするほとんどの場合に十分です。したがって、最短の解決策(そして私が1回の試行で覚えている唯一の解決策)に賛成票を投じました。
エリックS

25
または--name-status
Neil Traft、2015年

CLI gitが本当に好きな人として、gitk実際には、ファイルを確認して、差分が存在するファイルを表示する適切な方法です。例:ピアからのモンスターコミットのコードレビュー。
Elijah Lynn

192

私は個人の組み合わせを使用--stat--onelineショーのコマンドを実行します。

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

追加/削除の統計が気に入らない/望まない場合は、-stat--name-onlyに置き換えることができます。

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD

4
これは素晴らしい!基本的に、Githubがコミットビューの上部に表示するファイルの概要を提供します。ありがとう。
trisweb 2013年

非常に素晴らしい。エイリアスを定義するには:alias gits='git show --stat --oneline'、それgits自体で(HEAD内の)最新の変更gits b24f5fbを表示しますが、任意のリビジョンの変更を表示するために使用できます。
ブレントファウスト

5
gitエイリアスを作成することもできます...たぶんgit config --global alias.changes 'show --stat --oneline'。次にgit changes、(オプションのcommit-ishを使用して)入力して、上記の最初の例の出力を取得できます。
lindes 2013

Windows用のGitは二重引用符が必要です:git config --global alias.changes "show --stat --oneline"
Alchemistmatt

3
いいね。そして、受け入れ答えとは異なり、git show例えば:また、隠した変更を見直すために働くgit show --stat --oneline stash@{1}
ジェフ・ワードを

83

あなたもすることができます

git log --name-only

さまざまなコミット、コミットメッセージ、変更されたファイルを参照できます。

qと入力してプロンプトを元に戻します。


ありがとう、役立ちます。ところで:git show 5944ad2a8b5 --name-only特定のコミットの名前をリストするために使用します
LiuWenbin_NO。

68

最近、2つのコミットの間に変更されたすべてのファイルをリストする必要がありました。だから私は(これも* nix固有の)コマンドを使いました

git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq

更新:または、イーサンが以下で指摘するように

git diff --name-only START_COMMIT..END_COMMIT

を使用--name-statusすると、各ファイルの横に変更(追加、変更、削除など)も含まれます

git diff --name-status START_COMMIT..END_COMMIT

4
使用する場合git diff --name-status START_COMMIT..END_COMMIT、末尾は必要ありません|sort | uniq
2013

上記のコメントの修正:git diff --name-only START_COMMIT..END_COMMIT
Ethan

これは私が探していたものです。どのように私はそれを使用しました:git diff --name-only START_COMMIT..END_COMMIT | grep -v -e '**.png' -e '**.xml'。私は、何千ものPNGとXMLレイアウトを追加した巨大なPRに対してのみ、コード変更のリストを望んでいました。
AutonomousApps

63

最も単純な形式:

git show --stat (hash)

それは覚えやすく、必要なすべての情報が得られます。

ファイルの名前だけが本当に必要な場合は、--name-onlyオプションを追加できます。

git show --stat --name-only (hash)


2
--name-onlyには、作者、日付、コミットメッセージなどの情報を含むいくつかのヘッダー行が含まれます。
食欲をそそるエリジウム2016

マージコミットで機能することがわかった1つだけ
Alex Punnen

47

変更したエイリアスをよく使用します。設定するには:

git config --global alias.changed 'show --pretty="format:" --name-only'

次に:

git changed (lists files modified in last commit)   
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)

役に立つかもしれない同様のコマンド:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only

40

使用する

git log --name-status

これにより、コミットID、メッセージ、変更されたファイル、および変更、作成、追加、削除のいずれかが表示されます。オールインワンコマンドのやや。


38

標準のgit diffコマンドの使用(スクリプト作成にも適しています):

git diff --name-only <sha>^ <sha>

変更されたファイルのステータスも必要な場合:

git diff --name-status <sha>^ <sha>

これはマージコミットでうまく機能します。


26

このコマンドを名前で試して、行数を変更します

git show --stat <commit-hash>

ファイル名のみを表示

git show --stat --name-only  <commit-hash>

最後のコミットハッシュを取得するには、このコマンドを試してください

git log -1

ファイル名とファイルステータスの変更、作成、または削除を伴う最後のコミット

 git log -1 --oneline --name-status <commit-hash>

またはすべてのために

git log

より高度なgitログ情報については、この記事をお読みください

https://devhints.io/git-log-format

https://devhints.io/git-log


1
@DanFare "致命的:認識されない引数:--names-only" from 2.20.1.windows.1
user2864740


20

OK、特定のコミットですべてのファイルを表示する方法はいくつかあります...

情報を減らしてコミットしたファイルの名前のみ表示するには、単に追加--name-onlyまたは--name-statusフラグを付けることができます...これらのフラグは、以前のコミットとは異なるファイル名を表示するだけです...

できそうgit diffに続く--name-only2の後にハッシュをコミットすると、<sha0> <sha1>以下のようなもの:

git diff --name-only 5f12f15 kag9f02 

以下の画像も作成して、これらの状況で実行するすべての手順を示します。

git diff --name-only 5f12f15 kag9f02


なぜ2つの参照(ハッシュに名前を付ける)なのですか?
ハクレ

15

これを使用して、2つのチェンジセット間で変更されたファイルのリストを取得します。

git diff --name-status <SHA1> <SHA2> | cut -f2

うんしかし、状況がよくで、非常に便利です(isntanceのために、あなたのようなもので削除されたもの以外のすべてのファイルを表示するためにgrepをしたい場合がありますgit diff --name-status .. | grep ^[^D] | cut -f2
ピエール・エイドリアンビュイソン


14

ありますgit whatchangedよりも低いレベルです、git log

NAME
       git-whatchanged - Show logs with difference each commit introduces

コミットの概要とその下のファイルのリストをモードとともに出力し、added(A)、deleted(D)またはmodified(M);

$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363

次のようなものを与えるでしょう:

commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx <xx@xx.nl>
Date:   Tue Sep 29 17:23:22 2015 +0200

    added fb skd and XLForm

:000000 100644 0000000... 90a20d7... A  Pods/Bolts/Bolts/Common/BFCancellationToken.h
:000000 100644 0000000... b5006d0... A  Pods/Bolts/Bolts/Common/BFCancellationToken.m
:000000 100644 0000000... 3e7b711... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h
:000000 100644 0000000... 9c8a7ae... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m
:000000 100644 0000000... bd6e7a1... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h
:000000 100644 0000000... 947f725... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m
:000000 100644 0000000... cf7dcdf... A  Pods/Bolts/Bolts/Common/BFDefines.h
:000000 100644 0000000... 02af9ba... A  Pods/Bolts/Bolts/Common/BFExecutor.h
:000000 100644 0000000... 292e27c... A  Pods/Bolts/Bolts/Common/BFExecutor.m
:000000 100644 0000000... 827071d... A  Pods/Bolts/Bolts/Common/BFTask.h
...

この回答が「無関係な情報なし」と実際には一致しないことはわかっていますが、このリストの方がファイル名よりも役立つと思います。


さらに、whatchangedパラメーターを指定する代わりにコマンドを1つだけ使用します。
ガブリエリウス2016年

11

私はこれが好き:

git diff --name-status <SHA1> <SHA1>^

これはAD(追加と削除)ファイルのステータスを逆方向に取得すると思います。これは、指定されたコミットから前のコミットへの差分ではなく、その逆を示しているためです。それはあるはずですgit diff --name-status <SHA1>^ <SHA1>
Troy Gizzi 2015年

11

最後のコミットでファイルのリストを変更したいだけの場合は、単純な1行のコマンドを使用します。

git diff HEAD~1 --name-only

8

コミットで変更されたファイルを一覧表示します。

git diff --name-only SHA1^ SHA1

これは、ログメッセージ、余分な改行、またはその他の混乱を表示しません。これは、現在のコミットだけでなく、どのコミットでも機能します。わからないことはしていない理由は非常に私はそれを追加しているので、まだ言及されて。


この2つは同じように見えます:git diff SHA1^ SHA1git show SHA1
Vladimir Vukanac

1
@mrWこれらのコマンドは同様の出力を生成しますがgit show、コミットメッセージも表示します
Newtonx

8

ログを表示します。

COMMITは、空白( "")、sha-1、またはsha-1の短縮形にすることができます。

git log COMMIT -1 --name-only

これにより、ファイルのみがリストされ、以降の処理に非常に役立ちます。

git log COMMIT -1 --name-only --pretty=format:"" | grep "[^\s]"

8

これに対する完全な答えが見つかりました:

git show --name-status --oneline <commit-hash>

私が知ることができるように

which files were just modified M

Which files were newly added , A

Which files were deleted , D

5

" git show --stat"(Ryanに感謝)と2つのsedコマンドの組み合わせにより、データが削減されます。

git show --stat <SHA1> | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

これにより、変更されたファイルのリストのみが生成されます。


5

ファイル一覧として表示する簡単なトリックがあり:、ハッシュの後に追加するだけです。

git show 9d3a52c474:

次に、ドリルインできます。

git show 9d3a52c474:someDir/someOtherDir

ファイルをヒットすると、ファイルの未加工バージョンが表示されます。これは、素敵なリファレンスや主要なコードを探しているだけの場合に必要です(diffはすべてを混乱させる可能性があります)。

git show 9d3a52c474:someDir/someOtherDir/somefile

この方法の唯一の欠点は、ファイルのツリーを簡単に表示できないことです。



2

これを使用して、マージコミットで変更されたファイルのリストを取得します

λ git log -m -1 --name-only --pretty="format:"
configs/anotherconfig.xml
configs/configsInRepo.xml

または

λ git log -m -1 --name-status --pretty="format:"
A       configs/anotherconfig.xml
M       configs/configsInRepo.xml

2

oh-my-zshおよびgitプラグインを使用している場合は、glgショートカットが役立ちます。


3
あなたはただ...あなたの答えからすべてのコードを切り取りましたか?これは私が言及したものはありません。回答ではなく、OPから要求された結果出力に無関係な情報ありません。あなたはまだたくさんの無関係な情報を出力する答えを持っています。しかし、今、それははるかに正確ではありません。OPはファイルのリストを出力したいだけでした。何をglg出力するか見てみましょう。混乱させて申し訳ありません。
RomainValeri

0

ファイルリストのみ(コミットメッセージさえも):

git show --name-only --pretty=format:

たとえば、変更されたすべてのファイルをエディターで開きます。

"$EDITOR" $(git show --name-only --pretty=format:)

-2

私は自分のエイリアスの概要を共有したいと思っていました。また、gitで 'zsh'を使用すると、クロマキーがすべてうまく機能し、コマンドプロンプトを変更することで常にブランチが必要であることを通知します。

SVNからカバーしている人にとって、これは便利です:(これは異なるスレッドからのアイデアの組み合わせであり、私はコピー/貼り付けの使用方法を知っていることを信用しています)

.gitconfig:
        ls = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative --name-status

>>git ls
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker| 
| A     icds.xcodeproj/project.pbxproj
| A     icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata
| A     icds/AppDelegate.m
| A     icds/Assets.xcassets/AppIcon.appiconset/Contents.json

* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker| 
| D     Classes/AppInfoViewControler.h
| D     Classes/AppInfoViewControler.m
| D     Classes/CurveInstrument.h


.gitconfig: 
       lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>>git lt
* 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker
* e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker
* 778bda6 - Cleanup for new project (11 hours ago) Jim Zucker
* 7373b5e - clean up files from old version (11 hours ago) Jim Zucker
* 14a8d53 - (tag: 1.x, origin/swift, origin/master, master) Initial Commit (16 hours ago) Jim Zucker


.gitconfig
lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative

>> git lt

commit 99f21a61de832bad7b2bdb74066a08cac3d0bf3c
Author: Jim Zucker <jim@stratengllc.com>
Date:   Tue Dec 1 22:23:10 2015 -0800

    New Files from xcode 7

A       icds.xcodeproj/project.pbxproj
A       icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata


commit e0a1bb6b59ed6a4f9147e894d7f7fe00283fce8d
Author: Jim Zucker <jim@stratengllc.com>
Date:   Tue Dec 1 22:17:00 2015 -0800

    Move everything to old

D       Classes/AppInfoViewControler.h
D       Classes/AppInfoViewControler.m
D       Classes/CurveInstrument.h
D       Classes/CurveInstrument.m

-3

これはうまくいくはずです:

git status

これは、ステージングされていないものとステージングされているものを示します。


7
問題は、コミットされる予定のコミットではなく、以前にコミットされたコミットでファイルのリストを取得することです。
Rup
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.