Як застосувати патч, сформований за допомогою git format-patch?


221

У мене є 2 локальних сховища git, обидва вказують на одне віддалене сховище.

Якщо в одному сховищі git я git format-patch 1можу застосувати цей патч до іншого сховища?

Відповіді:


330

Примітка. Спочатку ви можете попередньо переглянути, що буде робити ваш патч:

Спочатку статистика:

git apply --stat a_file.patch

Потім сухий запуск для виявлення помилок:

git apply --check a_file.patch

Нарешті, ви можете git amзастосувати свій патч як фіксацію: він дозволяє підписати застосований патч.
Це може бути корисним для подальшого ознайомлення.

git am --signoff < a_file.patch 

Дивіться приклад у цій статті :

У вашому журналі журналу git ви побачите, що повідомлення про фіксацію містять тег "Підписаний вихід". Цей тег прочитає Github та інші, щоб надати корисну інформацію про те, як комісія закінчилася в коді.

Приклад


9
Примітка до себе: 200-й золотий знак "Велика відповідь".
VonC

4
git am < somepatch.patchдає "фатально: порожнє ім'я ідентифікатора (для <>) не дозволено". Хтось може мені пояснити, чому?
gromit190

@ gromit190, що означає погані Authorзаголовки в патчі, та / або ви цього не зробили git config user.{name,email}.
ulidtko

ГАРАЗД; git apply --checkкаже patch does not apply, і git apply -3каже repository lacks the necessary blob to fall back on 3-way merge.В git, відмовляння від комісій - це такий вітер; але як люди відновлять свої патчі поверх оновленого коду?
улідко

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 "[... full path to the file ...] / 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:-) 👍
Jordan Gee


14

Якщо ви використовуєте ID JetBrains IDE (наприклад, IntelliJ IDEA, Android Studio, PyCharm), ви можете перетягнути файл патча та запустити його всередину IDE, і з'явиться діалогове вікно, де відображатиметься вміст патчу. Все, що вам потрібно зробити зараз, це натиснути кнопку «Застосувати виправлення», і буде створено комісію.


1
Дякую за це Це дійсно корисно для всіх. Є прийнята відповідь. але це теж корисно.
Ласіта Бенарагама

1
@ambarox Але цю відповідь було оскаржено один раз, я не знаю, чому
ice1000

1
хтось може подумати, що єдиний спосіб застосувати виправлення - це командний рядок. : D я дав тобі привітання. Будьмо, друже.
Ласіта Бенарагама

1
@LasithaBenaragama - вид. ТА призначений не лише допомогти ОП, але й усім, хто слідує за цим. Ця відповідь (хоча і корисна) не дає загального рішення. Це дозволило б зробити чудовий маленький пост у блозі, але не "так добре" відповідь. Пояснив би протиріччя!
OldTinfoil

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.