Как применить очень старый патч в Git? - PullRequest
5 голосов
/ 20 февраля 2012

У меня есть git-репозиторий и очень старый патч (сделанный в 2007 году), который я хочу применить к нему.С тех пор содержимое репозитория значительно изменилось, и когда я пытаюсь применить патч, он выходит из строя из-за конфликтов.

Я хотел бы разобраться с конфликтами внутри git, добавив патч как новыйветвь и слияние его обратно к мастеру.Но для этого мне нужно найти самый ранний коммит, к которому патч может быть применен без ошибок.Есть ли простой способ сделать это в git?

Ответы [ 2 ]

12 голосов
/ 20 февраля 2012

Вы должны быть в состоянии сделать это с помощью git bisect: начните деление пополам как обычно, а затем используйте:

git bisect run git apply --check ${patch}

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

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

Если вы хотите самое раннее, запуститевторой биссект с «не применяется» в качестве теста, между началом хранилища и местом, где он действительно применяется.

1 голос
/ 24 июля 2016

Если патч записывает идентификаторы больших двоичных объектов, к которым он должен применяться, вы можете использовать git apply --3way для отката при трехстороннем слиянии, если исправления применяются не совсем.

С man git apply:

-3, --3way

Если исправление не применяется корректно, используйте трехстороннее объединение, если исправление записывает идентичность большого двоичного объекта, к которому он должен применяться,и у нас есть эти BLOB-объекты, доступные локально, возможно, оставляя маркеры конфликта в файлах в рабочем дереве для разрешения пользователем.Этот параметр подразумевает параметр --index и несовместим с параметрами --reject и --cached.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...