Ошибка в git patch при использовании git am

Когда я пытаюсь выполнить патч, используя:

git am 0001-someFile.patch

но я получаю эту ошибку:

error: patch failed: src/***/file.c:459
error: src/***/file.c: patch does not apply
Patch failed at 0001 someFile.patch
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".

Я пытаюсь вручную объединить конфликты, используя:

git mergetool --tool=meld

Но я получаю:

No files need merging

Как я могу решить эту проблему? Я получаю имя файла с ошибкой, но понятия не имею о строке (это большой файл)

Может быть, есть лучший способ выполнить такое исправление?

2 ответа

Я отвечаю за все исправления на моей работе. У меня это случалось много раз. Патч не может быть объединен. Причина, по которой это происходит, заключается в том, что в основной ветке есть изменения, которые патч не учел, что не позволяет корректно корректировать патч. Из всего моего опыта это может быть вызвано несколькими причинами:

  • Человек, который сделал исправление, не смог извлечь ветку master и перебазировать master в свою ветку разработки.
  • Между моментом, когда человек извлек и исправление было применено, в основную ветку было внесено достаточно изменений, чтобы остановить применение исправления из-за слишком большого количества конфликтов.
  • Человек исправлен неправильно.

Вот поток, с которым я добился наибольшего успеха. (Это предполагает, что человек развивается на ветке, отличной от главной)

  1. Убедитесь, что вы добавили все файлы и зафиксировали все изменения.
  2. мастер проверки
  3. мерзавец
  4. git checkout {ветка разработки}
  5. git rebase master (это позволит ускорить ветку разработки с master)
  6. git checkout -b {ветка отправки} master
  7. git merge --squash --no-commit {ветка разработки}
  8. git commit -am "Commit Comment Here" (ПРИМЕЧАНИЕ: этот комментарий коммита будет названием патча)
  9. git format-patch origin.. HEAD

Это гарантирует, что ваш патч обновлен по отношению к основной ветке источника. Отправьте этот патч и, надеюсь, патч будет применен до того, как на мастере будет сделано слишком много изменений.

Вам нужно сделать 3-х стороннее слияние:

  git am -3 0001-someFile.patch

  git mergetool -t meld
Другие вопросы по тегам