Ошибка в 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 в свою ветку разработки.
- Между моментом, когда человек извлек и исправление было применено, в основную ветку было внесено достаточно изменений, чтобы остановить применение исправления из-за слишком большого количества конфликтов.
- Человек исправлен неправильно.
Вот поток, с которым я добился наибольшего успеха. (Это предполагает, что человек развивается на ветке, отличной от главной)
- Убедитесь, что вы добавили все файлы и зафиксировали все изменения.
- мастер проверки
- мерзавец
- git checkout {ветка разработки}
- git rebase master (это позволит ускорить ветку разработки с master)
- git checkout -b {ветка отправки} master
- git merge --squash --no-commit {ветка разработки}
- git commit -am "Commit Comment Here" (ПРИМЕЧАНИЕ: этот комментарий коммита будет названием патча)
- git format-patch origin.. HEAD
Это гарантирует, что ваш патч обновлен по отношению к основной ветке источника. Отправьте этот патч и, надеюсь, патч будет применен до того, как на мастере будет сделано слишком много изменений.
Вам нужно сделать 3-х стороннее слияние:
git am -3 0001-someFile.patch
git mergetool -t meld