2012-02-20 3 views
5

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

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

ответ

12

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

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

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

Это даст вам последнее сообщение, в котором будет применен патч.

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

+0

'git bisect' нуждается в хорошей ревизии, и если бы я знал это, у меня не было бы этой проблемы. :( –

1

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

От man git apply:

-3, --3way

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

Смежные вопросы