В git, как мне создать один патч для последних 2+ ревизий? - PullRequest
47 голосов
/ 07 февраля 2010

Я хотел бы создать патч для последних 2 ревизий.

git format-patch -2

дает мне 2 файла патча, по одному на каждую ревизию

git format-patch HEAD~2..HEAD

дает то же самое.

git format-patch -1 HEAD~2..HEAD

дает один файл, но содержит только изменения для последней ревизии.

Есть ли способ сделать это в git?

Ответы [ 4 ]

50 голосов
/ 07 февраля 2010
git diff HEAD~2..HEAD > my-patch.diff

Тем не менее, он не будет иметь метаданных per-commit для форматирования патча.

45 голосов
/ 17 августа 2012

Используйте параметр --stdout, а затем поместите его в файл.

Вроде так:

git format-patch HEAD~2..HEAD --stdout > changes.patch

Это сохранит метаданные для каждого коммита.

2 голосов
/ 22 сентября 2018

С Git 2.20 (Q4 2018) и более у вас теперь есть:

  • git format-patch --interdiff.
  • git format-patch --rangediff.

Оба помогают объяснить разницу между этой версией и предыдущей попыткой в ​​сопроводительном письме (или после черточек в виде комментария).

format-patch: разрешить --interdiff / --rangediff применить к одиночному пятну

При отправке пересмотренной версии патча или серии может быть полезно (для рецензентов) включить сводку изменений с момента предыдущей попытки в виде интердифф, как правило, в сопроводительном письме.
Тем не менее, иногда полезно, несмотря на шумное чтение, вставить интердифф или дальний диапазон в секцию комментариев одиночного патча серии из 1 патча.

См. commit ee6cbf7 , commit 3fcc7a2 , commit 3b02641 , commit 5ac290f , commit 126facf , коммит fa5b7ea (22 июля 2018 г.) Eric Sunshine (sunshineco) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 688cb1c , 17 сентября 2018 г.)

Поэтому добавьте «git format-patch --interdiff=<prev>», чтобы вставить интердифф в раздел комментариев одиночного патча, вместо того, чтобы требовать сопроводительное письмо.
Interdiff имеет отступ, чтобы не путать git-am и читателей-людей с тем, чтобы считать его частью самого патча.

См. коммит 40ce416 , коммит 8631bf1 , коммит 4ee9968 , коммит 2e6fd71 , коммит 31e2617 , коммит 73a834e , коммит 2566865 , коммит 87f1b2d (22 июля 2018) Эрик Саншайн (sunshineco) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 881c019 , 17 сентября 2018 г.)

Поэтому расширьте «git format-patch --range-diff=<refspec>», чтобы вставить range-diff в раздел комментариев одиночного патча, вместо того, чтобы требовать сопроводительное письмо.

0 голосов
/ 07 февраля 2010

Вы можете сделать что-то вроде:

$ git checkout -b tmp
$ git reset HEAD~2
$ git commit -a

Коммит для ветки tmp будет таким же, как 2 отдельных коммита.

...