Depende de lo que quieras hacer cuando revises esa confirmación. Si todo lo que está haciendo es verificarlo para poder construir o probar esa revisión, entonces no hay nada de malo en trabajar con un cabezal separado. Solo recuerde verificar una rama real antes de realizar cualquier confirmación ( git checkout master
por ejemplo), para que no cree confirmaciones que no estén incluidas en ninguna rama.
Sin embargo, si desea realizar más confirmaciones a partir de ese punto, debe crear una rama. Si realiza confirmaciones a las que no hace referencia una rama, pueden perderse fácilmente y, finalmente, el recolector de basura de git las limpiará, ya que nada se refiere a ellas. Puede crear una nueva rama ejecutando:
git checkout -b newbranch ea3d5ed
Para ayudar a visualizar, aquí hay algunos diagramas que demuestran cómo trabajar en una cabeza separada difiere de trabajar en una rama.
Comencemos con 3 confirmaciones en master
, A, B y C. master
es la rama actual, por lo que HEAD
apunta a master
, que apunta a confirmar C.
A B C
* - * - * <- maestro <- HEAD
Ahora, si nos comprometemos, git creará una confirmación que tiene C como padre (porque esa es la confirmación actual, apuntada desde HEAD
via master
), y se actualizará master
para apuntar a esa nueva confirmación. Todas nuestras confirmaciones están ahora master
y HEAD
apuntan a la nueva confirmación master
.
A B C D
* - * - * - * <- maestro <- HEAD
Ahora echemos un vistazo a B, dándonos un desapegado HEAD
.
A B C D
* - * - * - * <- maestro
^
\ - CABEZA
Todo funciona bien aquí; podemos mirar todos los archivos, construir nuestro programa, probarlo, etc. Incluso podemos crear nuevas confirmaciones; pero si lo hacemos, no hay ninguna rama en la que estemos, por lo que no podemos apuntar ninguna rama a esa nueva confirmación. Lo único que lo señala es HEAD
:
A B C D
* - * - * - * <- maestro
\
* <- CABEZA
mi
Si más tarde decidimos master
volver a pagar, no habrá nada que se refiera a E.
A B C D
* - * - * - * <- maestro <- HEAD
\
*
mi
Dado que no hay nada que se refiera a él, puede ser difícil de encontrar, y git considera que las confirmaciones sin referencias deben ser abandonadas (ocurren con bastante frecuencia si realizas una nueva base, o aplastes parches, o realizas otra manipulación divertida del historial; generalmente representan parches abandonados que ya no te importa). Después de una cierta cantidad de tiempo, git lo considerará basura, para ser descartado la próxima vez que se ejecute la recolección de basura.
Entonces, en lugar de verificar una revisión simple y obtener un encabezado separado, si siente que va a realizar más confirmaciones, debe usar git checkout -b branch B
para crear una rama y verificarla. Ahora sus confirmaciones no se perderán, ya que se incluirán en una rama, a la que puede consultar fácilmente y fusionar más adelante.
A B C D
* - * - * - * <- maestro
^
\ - rama <- HEAD
Si olvida hacer esto y crea confirmaciones desde una rama, no hay necesidad de preocuparse. Puede crear una rama que haga referencia a la revisión del cabezal con git checkout -b branch
. Si ya ha vuelto a la master
rama y se da cuenta de que olvidó una confirmación perdida, puede encontrarla usando git reflog
, que le mostrará un historial de lo que las confirmaciones HEAD
han señalado durante los últimos días. Todo lo que todavía esté en el reflog no se recolectará como basura y, por lo general, las referencias se guardan en el reflog durante al menos 30 días.