git diff с авторским фильтром

У меня есть серия коммитов от разных авторов, и я хотел бы видеть вывод git dff между 2 коммитами, но только с учетом коммитов одного из авторов, что-то вроде, - что-то вроде --author в git log.

Меня интересует финальная сводная разница, а не различия отдельных коммитов.

Есть ли для этого мерзавец?

33
задан Samer Buna 18 August 2010 в 06:15
поделиться

2 ответа

Проблема в том, что вы не можете этого сделать в общем случае. Предположим, Алиса изменяет конкретный файл, затем Боб изменяет его, включая части, которые Алиса изменила, и, наконец, Алиса изменяет его снова.Как вы объедините два различия Алисы в одну разницу? Если вы возьмете их как два патча, второй просто не будет применяться, если патч Боба не будет применен первым! Но вы также не можете просто отличить конечное состояние от оригинала, потому что оно будет включать изменения Боба.

Если вы предпочитаете пример с операциями git, это похоже на интерактивную перебазировку и просто удаление случайных коммитов. Конечно, иногда это сработает, а иногда просто полностью выйдет из строя, потому что один из этих коммитов зависел от одного из тех, которые вы удалили.

Итак, я знаю, вы сказали, что не хотите отдельных изменений при фиксации, но это все, на что вы действительно можете надеяться:

git log -p --author=Alice

Или, если вы действительно отчаянно нуждаетесь в одном отличии, это даст вам его, но только в тех случаях, когда нет взаимодействия с патчами, как я упоминал выше:

git checkout -b temp first_commit
git log --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 --pretty=%H --author=Alice first_commit..second_commit)
git diff first_commit temp

Это действительно требует операций в дереве работы, потому что нет абсолютно никакой гарантии, что какое-либо из патчей будет применено после пропуска фиксации. Вам просто нужно попробовать и увидеть.

27
ответ дан 27 November 2019 в 19:30
поделиться

Возможно, вы могли бы использовать функции форматирования diff-tree

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 для соответствующего автора.

1
ответ дан 27 November 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: