40

さまざまな作成者による一連のコミットがあり、git dff2 つのコミット間の出力を確認したいのですが、git log の --author のような作成者の 1 人によるコミットのみを考慮します。

個々のコミットの差分ではなく、最終的な要約の差分に興味があります。

そのためのgitトリックはありますか?

4

2 に答える 2

32

ここでの問題は、一般的なケースではこれができないことです。Alice が特定のファイルを変更し、Bob がそれを (Alice が変更した部分を含めて) 変更し、最後に Alice が再度変更したとします。Alice の 2 つの diff を 1 つの diff にどのように結合しますか? それらを 2 つのパッチと見なすと、Bob のパッチが最初に適用されなければ、2 番目のパッチは適用されません! ただし、ボブの変更が含まれるため、最終状態を元の状態と単純に比較することもできません。

git 操作の例を好む場合、これはインタラクティブなリベースを行い、ランダムなコミットを削除するようなものです。もちろん、うまくいくこともありますが、完全に失敗することもあります。

だから、あなたが個々のコミットの差分を望んでいないと言ったのは知っていますが、それはあなたが本当に望むことができるすべてです:

git log -p --author=Alice

または、単一の diff が本当に必要な場合は、これで取得できますが、上記のようなパッチの相互作用がない場合に限ります。

git checkout -b temp first_commit
git log --reverse --pretty=%H --author=Alice first_commit..second_commit |
while read commit; do
    git cherry-pick $commit || exit
done
# or if you have a new version of git, cherry-pick works with multiple arguments:
# git cherry-pick $(git log --reverse --pretty=%H --author=Alice first_commit..second_commit)
git diff first_commit temp

コミットがスキップされた後にパッチが適用されるという保証はまったくないため、これには実際に作業ツリーでの操作が必要です。あなたはただ試して見る必要があります。

于 2010-08-18T13:20:05.813 に答える
1

diff-treeのフォーマット機能を使用できるかもしれません

format:<string>

このformat:<string>形式により、表示する情報を指定できます。の代わりに改行を取得するという注目すべき例外を除いて、形式に
少し似ています。printf%n\n

例えば、

format:"The author of %h was %an, %ar%nThe title was >>%s<<%n" 

次のように表示されます。

The author of fe6e0ee was Junio C Hamano, 23 hours ago
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<

次に、関連する作成者を grep できます。

于 2010-08-18T06:25:09.237 に答える