Как применить патч, созданный с помощью git format-patch?


223

У меня есть 2 локальных репозитория git, оба указывают на один и тот же удаленный репозиторий.

В одном репозитории git, если я делаю git format-patch 1 , как я могу применить этот патч к другому репозиторию?

Ответы:


331

Примечание. Сначала вы можете просмотреть, что будет делать ваш патч:

Сначала статистика:

git apply --stat a_file.patch

Затем пробный прогон для выявления ошибок:

git apply --check a_file.patch

Наконец, вы можете использовать его git amдля применения патча в качестве коммита: он позволяет подписать примененный патч.
Это может быть полезно для дальнейшего использования.

git am --signoff < a_file.patch 

Смотрите пример в этой статье :

В вашем журнале git вы обнаружите, что сообщения о коммитах содержат тег «Подписано». Этот тег будет прочитан Github и другими, чтобы предоставить полезную информацию о том, как коммит оказался в коде.

пример


9
Примечание для себя: золотой значок "Великий ответ".
VonC

4
git am < somepatch.patchприводит к «фатальному: пустое имя (для <>) не разрешено». Может кто-нибудь объяснить мне, почему?
gromit190

@ gromit190, что означает плохие Authorзаголовки в патче, и / или вы этого не сделали git config user.{name,email}.
Улидько

ХОРОШО; git apply --checkговорит patch does not applyи git apply -3говорит repository lacks the necessary blob to fall back on 3-way merge.В мерзавце, перебазирование коммитов - такой легкий ветерок; но как люди переоценивают свои патчи поверх обновленного кода?
Улидько

1
@ulidtko Может быть, с stackoverflow.com/a/15375869/6309 ?
VonC

163
git apply name-of-file.patch

25
Возможно, это не ответило на исходный подробный вопрос, но ответило на вопрос в заголовке, поэтому я на этой странице. Спасибо!
Рок Ли

12
Я понимаю, что это старый вопрос и ответ ... но я подумал, что некоторым людям может быть полезно понять разницу между git apply и git am .
mgarey

1
git apply "[... полный путь к файлу ...] / name-of-file.patch"
Антон Лыхин

41

Или, если вы пинаете это старой школы:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
Просто знайте: это не создаст коммит, поэтому он потеряет сообщение о коммите и информацию об авторе.
Цезарь

22

Сначала вы должны принять к сведению разницу между git amиgit apply

Когда вы используете, git amвы обычно хотите применить много патчей. Таким образом следует использовать:

git am *.patch

или просто:

git am

Git автоматически найдет патчи и применит их по порядку ;-)

UPD
Здесь вы можете найти, как генерировать такие патчи


1
Это объяснение разницы помогло мне использовать git apply.. и в --reverse:-) 👍
Джордан Джи


14

Если вы используете IDE JetBrains (например, IntelliJ IDEA, Android Studio, PyCharm), вы можете перетащить файл исправления и поместить его в IDE, после чего появится диалоговое окно, отображающее содержимое исправления. Все, что вам нужно сделать сейчас, это нажать «Применить патч», и коммит будет создан.


1
Спасибо за это. Это действительно полезно для всех. Есть принятый ответ. но это тоже полезно.
Ласита Бенарагама

1
@ambarox Но этот ответ один раз был отклонен, я не знаю почему
ice1000

1
может кто-то думает, что единственный способ применить патчи - через командную строку. : D Я дал вам голос. ура приятель.
Ласита Бенарагама

1
@LasithaBenaragama - вид. SO предназначен, чтобы помочь не только ОП, но и всем, кто следует. Этот ответ (хотя и полезный) не дает общего решения. Это сделало бы отличный небольшой пост в блоге, но не "ТАК хороший" ответ. Объяснил бы понижающий голос!
OldTinfoil

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.