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

223

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

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

silverburgh
источник

Ответы:

331

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

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

git apply --stat a_file.patch

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

git apply --check a_file.patch

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

git am --signoff < a_file.patch 

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

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

пример

VonC
источник
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:-) 👍
Джордан Джи
22

Если вы хотите применить его как коммит , используйте git am .

Якуб Наребски
источник
1
Как вы обычно получаете файлы mbox в первую очередь?
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
14

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

ice1000
источник
1
Спасибо за это. Это действительно полезно для всех. Есть принятый ответ. но это тоже полезно.
Ласита Бенарагама
1
@ambarox Но этот ответ один раз был отклонен, я не знаю почему
ice1000
1
может кто-то думает, что единственный способ применить патчи - через командную строку. : D Я дал вам голос. ура приятель.
Ласита Бенарагама
1
@LasithaBenaragama - вид. SO предназначен, чтобы помочь не только ОП, но и всем, кто следует. Этот ответ (хотя и полезный) не дает общего решения. Это сделало бы отличный небольшой пост в блоге, но не "ТАК хороший" ответ. Объяснил бы понижающий голос!
OldTinfoil
-2

Вы можете использовать ниже упомянутый cmd

git apply fileName.patch
Амит Шарма
источник