Какие файлы BACKUP, BASE, LOCAL и REMOTE создаются в случае конфликта слияния git?

122

Я предполагаю, что файлы LOCAL и REMOTE соответствуют их названию, но для чего нужны BASE и BACKUP?

filler003
источник

Ответы:

166

Git выполняет трехстороннее слияние, находя общего предка (также известного как «база слияния») двух сливаемых ветвей. Когда вы вызываете git mergetoolконфликт, он создает эти файлы, подходящие для загрузки в типичный инструмент трехстороннего слияния. Таким образом:

  • foo.LOCAL: «наша» сторона конфликта - то есть ваша ветка ( HEAD), которая будет содержать результаты слияния
  • foo.REMOTE: «их» сторона конфликта - ветвь, в которую вы сливаетесь HEAD
  • foo.BASE: общий предок. полезно для подачи в инструмент трехстороннего слияния
  • foo.BACKUP: содержимое файла до вызова инструмента слияния будет сохранено в файловой системе, если mergetool.keepBackup = true.
Эдвард Томсон
источник
9
LOCALэто версия в HEAD. BACKUPбыла той версией, которая была на диске перед вызовом mergetool. Вероятно, он содержит маркеры конфликта diff3, и вы, возможно, отредактировали его перед вызовом mergetool.
Эдвард Томсон
вот хорошая статья, объясняющая случаи слияния, включая трехстороннее слияние: git-scm.com/book/en/v2/…
qatz
16
слова LOCAL / REMOTE как-то вводят в заблуждение, заставляют меня думать, что они относятся к «моим изменениям» / «удаленным изменениям», но на самом деле обычно в контексте «слияния с мастером», LOCAL - это целевая ветка, которая является другой модификацией, а REMOTE это исходная ветка, которая является моими модификациями. :)
TingQian LI
9
Они ... Ребаз делаешь? Потому что при перебазировании стороны меняются местами.
Эдвард Томсон