2011-05-27 9 views
9

Si hago¿Bifurcar en git crea una relación padre-hijo?

$ git branch a 
$ git checkout a 
Switched to branch 'a' 
$ git branch b 
$ git checkout b 
Switched to branch 'b' 
$ git branch c1 
$ git branch c2 

¿Hay alguna relación entre estas ramas, o hay todos considerados 'plana' porque no había ningún commit en ellos? En SVN, me gustaría modelar estas ramas de esta manera:

master 
| 
+-a 
    | 
    +-b 
    | 
    +-c1 
    | 
    +-c2 

Sin embargo, cuando trato de seguir this question y hacer gitk master a b c1 c2, me sale una línea plana, no el diagrama que puse arriba.

Respuesta

10

git no tiene una rama principal estricta, solo tiene una ruta de confirmación particular. En este caso, todos tienen el mismo compromiso como punto de partida, por lo que son todos iguales. Tan pronto como comiencen a tener sus propios compromisos, serán sus propias "líneas", pero en realidad no tendrán una relación mutua.

En cualquier punto, sin embargo, puede fusionar fácilmente con cualquier rama utilizando git merge, por lo que la relación "principal" no es tan fundamental. Git tiene el concepto de padre para el caso de usar --track (donde recibe confirmaciones de sus padres), pero esto es solo una función de conveniencia especial. Podría fácilmente tener cualquier número de "padres" si salpica sus I y cruza sus T (git merge branch A, git merge branch B, etc.).

0

Creo que si se fusiona con --no-ff no avanzará rápidamente los cambios y tendrá un historial de árbol exactamente como se creó.

4

Para mí, es útil pensar en las ramas como punteros. Está comenzando con un puntero llamado maestro que apunta a una confirmación particular. Cuando creas una rama, solo estás creando otro puntero que apunta a la misma confirmación. Entonces, el conjunto de comandos que tiene arriba da como resultado 5 punteros (maestro, a, b, c1, c2) que apuntan al mismo compromiso.

1

No hay relación entre las ramas.

Esta instrucción:

git branch c1 

es equivalente a:

cat .git/HEAD > .git/branch/ref/heads/c1 

Por eso, cuando la creación de una rama, que está configurando sólo una relación clave-valor entre el nombre de la rama y la confirmación identificados por es SHA1.

Cuestiones relacionadas