Sospecho que estás confundido aquí porque es fundamentalmente confuso. Para empeorar las cosas, todo lo nuestro / lo suyo cambia de roles (se vuelve hacia atrás) cuando estás haciendo un rebase.
En última instancia, durante una git merge
, la rama "nuestro" se refiere a la rama que está fusionando en :
git checkout merge-into-ours
y la rama "suya" se refiere a la rama (única) que está fusionando:
git merge from-theirs
y aquí "nuestro" y "ellos" tiene sentido, ya que a pesar de "ellos" es probablemente la suya de todos modos, "el suyo" no es el que usted estaba en cuando ejecutó git merge
.
Si bien el uso del nombre real de la sucursal puede ser bastante bueno, se desmorona en casos más complejos. Por ejemplo, en lugar de lo anterior, puede hacer:
git checkout ours
git merge 1234567
donde te estás fusionando por raw commit-ID. Peor aún, incluso puedes hacer esto:
git checkout 7777777 # detach HEAD
git merge 1234567 # do a test merge
en cuyo caso no hay nombres de sucursal involucrados!
Creo que es de poca ayuda aquí, pero de hecho, en gitrevisions
sintaxis , puede referirse a una ruta individual en el índice por número, durante una fusión en conflicto
git show :1:README
git show :2:README
git show :3:README
La etapa n. ° 1 es el antecesor común de los archivos, la etapa n. ° 2 es la versión de la rama de destino y la etapa n. ° 3 es la versión de la que se está fusionando.
La razón por la cual se intercambian las nociones "nuestra" y "suya" rebase
es que el rebase funciona haciendo una serie de selecciones de cereza, en una rama anónima (modo HEAD separado). La rama de destino es la rama anónima, y la rama de fusión es la rama original (previa al rebase): entonces "- nuestro" significa que el rebase anónimo se está construyendo mientras que "- el suyo" significa "nuestra rama está rebaseada" .
En cuanto a la entrada gitattributes: podría tener un efecto: "el nuestro" realmente significa "usar la etapa # 2" internamente. Pero como observa, en realidad no está en su lugar en ese momento, por lo que no debería tener un efecto aquí ... bueno, no a menos que lo copie en el árbol de trabajo antes de comenzar.
Además, por cierto, esto se aplica a todos los usos nuestros y los suyos, pero algunos están en un nivel de archivo completo ( -s ours
para una estrategia de fusión; git checkout --ours
durante un conflicto de fusión) y algunos son pieza por pieza ( -X ours
o -X theirs
durante un -s recursive
unir). Lo que probablemente no ayuda con nada de la confusión.
Sin embargo, nunca se me ocurrió un nombre mejor para estos. Y: ¡vea la respuesta de VonC a otra pregunta, donde git mergetool
introduce aún más nombres para estos, llamándolos "local" y "remoto"!