Существует два основных способа применения исправлений к измененным файлам:
- сопоставление неизмененных («контекст») и строк перед изменением
- Трехстороннее слияние на основе строки индекса Git
Строки контекста (предшествующие одному пробелу вместо +
или -
) являются частью формата унифицированного diff , на котором в основном основан формат diff в Git. Это дополнительные строки, которые идентичны в «исходных» и «измененных» исходных файлах, но окружают измененные области. Эти строки контекста (вместе со строками перед изменением (т. Е. Удаленными / измененными строками)) используются программой, которая применяет diff, чтобы найти, куда следует применять каждый «ханк» diff, даже если целевой файл «target» уже вставлен или удалили строки перед нормальным целевым местоположением (нормальное местоположение определяется номерами строк, которые фактически изменились в «целевом» файле (относительно «исходного» файла) из-за вставленных / удаленных линий).
Формат diff в Git также включает специальную строку «index» для каждого измененного файла, которая указывает идентификаторы объектов (то есть сокращенные хэши SHA-1) для «оригинальных» и «модифицированных» файлов. Если в репозитории назначения имеется «оригинальный» файл в его хранилище объектов, он может использовать его для точной реконструкции содержимого «измененного» файла и затем выполнить трехстороннее объединение между тремя версиями файл: «оригинальный», «измененный» (оба исходных файла) и «целевой» (целевой файл). Это используется git am -3
и может помочь автоматически разрешить некоторые конфликты между патчем и «целевым» файлом.