git log
имеет некоторые очень полезные параметры ограничения фиксации, такие как --no-merges
и --first-parent
. Я хотел бы иметь возможность использовать эти параметры при создании кумулятивного патча diff/stat/numstat для диапазона коммитов.
С помощью этих команд:
git log --oneline --first-parent --no-merges --patch 29665b0..0b76a27
git log --oneline --first-parent --no-merges --stat 29665b0..0b76a27
git log --oneline --first-parent --no-merges --numstat 29665b0..0b76a27
diff не является кумулятивным (изменения перечислены отдельно для каждой фиксации).
С помощью этих команд:
git diff --patch 29665b0..0b76a27
git diff --stat 29665b0..0b76a27
git diff --numstat 29665b0..0b76a27
diff является кумулятивным, но, к сожалению, git diff
не поддерживает параметры ограничения фиксации.
Так что мне бы хотелось, это кумулятивная функциональность разграничения git diff
в сочетании с ограничивающей лимит-функциональностью git log
.
Одна из моих идей заключалась в том, чтобы использовать git log
для генерации списка хэшей фиксации, а затем каким-то образом передать этот список в git diff
, чтобы создать кумулятивный разброс указанных коммитов. Что-то вроде этого (очевидно, этот метод хэшей трубопроводов git diff
фактически не работает):
git log --pretty=format:%h --first-parent --no-merges 29665b0..0b76a27 | git diff
где --pretty=format:%h
выводит хэши совпадающих коммитов.
Update
Благодаря @torek и @twalberg я теперь лучше понимаю операцию git diff
. Синтаксис диапазона 29665b0..0b76a27
действительно вводит в заблуждение, и теперь я понимаю, что он фактически не выполняет кумулятивный разброс по диапазону коммитов. Просматривая docs, я нашел это:
"diff" - это сравнение двух конечных точек, а не диапазонов, а обозначения диапазонов (
<commit>..<commit>
и<commit>...<commit>
) не означают диапазон, определенный в разделе "УКАЗАНИЕ ДИАПАЗОНОВ" в разделе gitrevisions (7).
Учитывая это, я перефразирую свой вопрос. С помощью этих команд:
git log --oneline --first-parent --no-merges --patch 29665b0..0b76a27
git log --oneline --first-parent --no-merges --stat 29665b0..0b76a27
git log --oneline --first-parent --no-merges --numstat 29665b0..0b76a27
изменения перечислены отдельно для каждого сопоставления. Как я могу объединить эти индивидуальные изменения, чтобы создать кумулятивный патч /stat/numstat?
Ответы на связанный возможный дублирующий вопрос полезны, предлагая решение: создать временную ветвь, вишни выбрать соответствующие коммиты, а затем сгенерировать diff.
Я только что написал ответ, который использует эту технику, но мне все еще интересно узнать, есть ли решение, для которого не требуется временная ветка?