En un conflicto de fusión de git, ¿qué son los archivos BACKUP, BASE, LOCAL y REMOTE que se generan?

122

Supongo que los archivos LOCAL y REMOTO son exactamente lo que sugiere su nombre, pero ¿para qué sirven BASE y BACKUP?

filler003
fuente

Respuestas:

166

Git realiza una fusión de tres vías, encontrando el ancestro común (también conocido como "base de fusión") de las dos ramas que está fusionando. Cuando invoca git mergetoolun conflicto, producirá estos archivos adecuados para introducirlos en una herramienta típica de combinación de 3 vías. Así:

  • foo.LOCAL: el lado "nuestro" del conflicto, es decir, su rama ( HEAD) que contendrá los resultados de la fusión
  • foo.REMOTE: el lado "suyo" del conflicto - la rama en la que te estás fusionando HEAD
  • foo.BASE: el antepasado común. útil para alimentar una herramienta de combinación de tres vías
  • foo.BACKUP: el contenido del archivo antes de invocar la herramienta de combinación, se mantendrá en el sistema de archivos si mergetool.keepBackup = true.
Edward Thomson
fuente
9
No. LOCALes la versión en HEAD. BACKUPera la versión que estaba en el disco antes de la invocación mergetool. Probablemente contiene los marcadores de conflicto diff3 y es posible que lo haya editado antes de invocarlo mergetool.
Edward Thomson
aquí hay un buen artículo que explica los casos de fusión, incluida la fusión de tres vías: git-scm.com/book/en/v2/…
qatz
16
las palabras LOCAL / REMOTO son de alguna manera engañosas, me hacen pensar que se refieren a "mis cambios" / "cambios remotos", pero en realidad generalmente en el contexto de "fusionar en maestro", LOCAL es la rama de destino que es la modificación de otros, y REMOTO es la rama fuente que son mis modificaciones. :)
TingQian LI
8
Ellos son ... ¿Estás haciendo un rebase? Porque los lados están invertidos en un rebase.
Edward Thomson