2011-12-14 13 views
7

Estoy tratando de averiguar por qué rebase requiere una combinación de tres vías. Por ejemplo, si tenemos¿Por qué git rebase requiere una combinación de 3 vías?

A1 - A2 
\ 
    B1 

Y he comprobado B1, y quiero realizar:

git rebase A2 

¿por qué git merge A2, B1 y A1? ¿Por qué no serían suficientes A2 y B1? Quiero decir, ¿no A2 y B1 como commit contienen la instantánea actual completa del árbol?

+1

gracias, eso es lo que estaba tratando de mostrar con mi pregunta. – worker1138

Respuesta

7

Para realizar una fusión, Git necesita averiguar qué sucedió exactamente en las dos ramas desde el antecesor común (A1). Como ha dicho correctamente, Git almacena instantáneas de los commit/árboles para obtener un conjunto de cambios real, tiene que comparar A2 a A1 y B1 a A1 y luego fusionar esos conjuntos de cambios individuales.

Lo mismo sucede en una rebase. Para aplicar el conjunto de cambios de A2 en B1, primero debemos calcular ese cambio establecido a partir de las diferencias entre A1 y A2. Y luego podemos aplicar eso al B1. Puede pensar en una rebase como algo similar a una generación automática de archivos de parche. Primero genera todos los archivos de parche de la rama anterior y los aplica luego al HEAD actual.

Por lo tanto, necesitamos las tres confirmaciones para calcular realmente las diferencias, ya que no podemos determinar qué sucedió en una confirmación simplemente observando esa confirmación.

+0

gracias, eso tiene muy buen sentido. – worker1138

Cuestiones relacionadas