git format-patch для всех коммитов в файл

Я хочу получить патчи для всех коммитов, которые сделаны в файл / папку.

Я могу получить список commit-id через git log --format="%H"-- path/to/folder

Есть ли способ получить патчи из этого списка.

[редактировать]:

код ниже частично решает мою проблему

for c in `git log --format="%H" -- path/to/file`;do git format-patch "$c^1".."$c" -o patches ; done

Так как формат-патч вызывается индивидуально, я получу все патчи с номером 0001-commit-text.patch, где я потеряю порядок патчей. Есть ли лучшие решения

4 ответа

Придумайте приведенный ниже сценарий оболочки для достижения этой цели. любые другие ответы приветствуются.

#!/bin/bash
COUNTER=1;
for c in `git log --format="%H" --reverse -- path/to/file`;do
    git format-patch --start-number=$COUNTER "$c^1".."$c" -o patches
    let COUNTER=COUNTER+1
done

Вы можете попробовать git diff initial_commit_id..latest_commit_id > changes.patch

Это основано на этой статье: https://www.lullabot.com/articles/git-best-practices-upgrading-the-patch-process

Например:

git diff ab0b3a55de5..6f5dbbc4187b97

Обновление: если вы указали путь к конкретному файлу в качестве аргумента для format-patch, он будет создавать патчи только для коммитов с изменениями в этом файле. Так что нет необходимости в цикле и одномоментном вызове format-patch. Смотрите пример в format-patch для одного файла

Так что попробуйте это:

get format-patch from..to -o patches /path/to/file 

Моя небольшая импровизация (только что сочиненная) с использованием только git:

      git format-patch $(git rev-list --max-parents=0 HEAD)..HEAD -- path/to/file

Может не работать, если rev-list --max-parentsвозвращает более одного коммита. Использована идея из этого поста:

Как показать первую фиксацию с помощью «git log»?

Основываясь на остальных ответах.

Если вам нужны все коммиты для файла, который находится в начальном/самом первом коммите, вы должны опустить SHA. Даже<SHA>^1в этом случае "работать" не будет.

      git format-patch --root

Ссылаясь на Как использовать git format-patch при первоначальной фиксации

Другие вопросы по тегам