¿Por qué la "rama de git" está en silencio en los repositorios nuevos?

Cuando crea un nuevo repositorio y ejecuta git branch , sale silenciosamente. Por ejemplo:

$ mkdir /tmp/foo; cd /tmp/foo; git init
Initialized empty Git repository in /tmp/foo/.git/

$ git branch

¿Por qué el comando no proporciona ningún resultado, o muestra la rama principal?

2

3 Respuestas

TL; DR

No existen cabezas de ramificación todavía.

Explicación detallada

Un repositorio de Git no tiene ramas hasta que realice su primer compromiso. Un repositorio recién inicializado establece HEAD en refs/heads/master, pero refs/heads/master no existirá o contendrá un puntero de confirmación hasta que se haya realizado el primer commit.

Durante una confirmación, Git desreferencia el HEAD de referencia simbólica para encontrar el encabezado de la rama actual, y luego actualiza esa cabeza con el hash de confirmación proporcionado por git-commit-tree.

El resultado final es que git branch no tiene nada que informar en un nuevo repositorio. Sin ramificaciones presentes, simplemente termina en silencio con un estado de salida de cero.

Ver también

  • git-branch (1)
  • git-commit-tree (1)
  • git-symbolic-ref (1).
  • git-update-ref (1)
  • gitcore-tutorial (7)
8
agregado
Buena explicación de lo que está sucediendo en la parte posterior. Esto ayudará a los usuarios a entender cómo funciona git.
agregado el autor Ikke, fuente

Tenga en cuenta que una rama es simplemente un puntero a una confirmación.
Como un repositorio vacío (con su árbol vacío ) no tiene confirmación, no tiene sucursal .

Un primer commit creará una rama llamada ' master ', porque HEAD hace referencia a refs/heads/master .
Si desea crear un primer commit en una diferente rama (que master ), necesitaría cambiar primero la referencia simbólica de HEAD (como se detalla en este hilo ):

git symbolic-ref HEAD refs/heads/non-master 

Y luego haz tu primer commit.

2
agregado

Sí, primero necesita realizar

$ git add .
$ git commit -m 'first commit'

comandos.

0
agregado