У меня есть серия коммитов от разных авторов, и я хотел бы видеть вывод git dff
между 2 коммитами, но только с учетом коммитов одного из авторов, что-то вроде, - что-то вроде --author в git log.
Меня интересует финальная сводная разница, а не различия отдельных коммитов.
Есть ли для этого мерзавец?
Проблема в том, что вы не можете этого сделать в общем случае. Предположим, Алиса изменяет конкретный файл, затем Боб изменяет его, включая части, которые Алиса изменила, и, наконец, Алиса изменяет его снова.Как вы объедините два различия Алисы в одну разницу? Если вы возьмете их как два патча, второй просто не будет применяться, если патч Боба не будет применен первым! Но вы также не можете просто отличить конечное состояние от оригинала, потому что оно будет включать изменения Боба.
Если вы предпочитаете пример с операциями 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
Это действительно требует операций в дереве работы, потому что нет абсолютно никакой гарантии, что какое-либо из патчей будет применено после пропуска фиксации. Вам просто нужно попробовать и увидеть.
Возможно, вы могли бы использовать функции форматирования 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 для соответствующего автора.