Як застосувати патч, сформований за допомогою 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.