0

特定のコミット SHA がある場合、そのコミットによって追加されたファイルのみを表示する最善の方法は何ですか? ありがとう。

4

2 に答える 2

3

「最高」というのは難しいですが (アイスクリームの最高のフレーバーは何ですか?)、方法はたくさんあります。

最短の出力ですが、コミットがマージではないことを前提としています[編集:または、まあ、以下を参照してください]:

git diff --name-only --diff-filter=A <id>^ <id>

これを使用する最も簡単な方法は、おそらく git エイリアスを使用することです。

git config alias.files-added '!git diff --name-only --diff-filter=A $1^'

(引数なしで実行すると、奇妙な「悪いリビジョン」メッセージが表示されることに注意してくださいgit files-added。しかし、まあ)。

マージ コミットを処理する必要がある場合は、「ファイルを追加する」とはどういう意味かを決定する必要があります。ファイルが親にない場合、ファイルは追加されますか? すべての親になかった場合は追加されますか?たとえばsubtopic-A、 、subtopic-B、およびsubtopic-Cを にマージし、topicファイルがおよびxyzの両方に存在したが、またはのいずれにも存在しなかったとします。「追加」されましたか?subtopic-Btopicsubtopic-Asubtopic-Cxyz

編集:「追加」の定義が「マージ前にほとんどの人が「メインライン」と呼ぶものではなかった」ことを意味する場合、この同じコマンドが機能します。つまり、topic上記のようにブランチにいて、1 つ以上の他のブランチをマージし、以前に名前が付けられたファイルがなかったときにtopic最終的なマージ コミットにファイルが含まれている場合、これは「追加された」と見なされます (いずれにしても、マージされたブランチのすべてにそれがありました)。galumphtopicgalumph

于 2013-10-19T21:28:11.270 に答える
0

もう少し調査した結果、これはかなり信頼できるソリューションのようです。

git show -m --name-status -1 -U | grep $'A\t'

于 2013-10-19T21:38:07.197 に答える