Con el primer commit que realicemos se creará de forma automática el puntero master, apuntando a este commit.
En cada nuevo commit el valor contenido en el puntero master irá cambiando, por el identificador del siguiente commit.
La rama master, es como cualquier otra rama. Es especial por ser la rama por defecto, pero en todo lo demás es igual que cualquier otra rama.
Cuando creamos una nueva rama ( git branch nueva_rama ), se creará un nuevo puntero, conteniendo el idenficador del commit actual. Crear una rama no implica estar en ella. ( ojo , hay que saltar a ella, para poder empezar a moverse en la nueva rama )
########
Y aquí es donde entra en función el puntero externo HEAD ( es com un faro ), este puntero sirve a GIT para saber en que rama estamos en cada momento.
Luego HEAD contiene el identificador de la rama actual, que a su vez contiene el identificador del último commit realizado en la rama.
HEAD APUNTA A LA RAMA DONDE ESTEMOS, Y CADA VEZ QUE CAMBIAMOS DE RAMA HEAD CAMBIA SU VALOR.
HEAD : Contiene una referencia al commit más reciente de la rama actual ( en la mayoria de los casos )
Cuando hacemos un salto a un commit concreto ( que no es el último donde apunta head ), entramos en un estado llamado “detached head state”, que indica que el puntero HEAD no contiene el identificador del último commit de la rama donde estemos ( contendrá el id del commit donde hemos hecho el checkout y no la ruta ref:refs/heads/rama ). Pero esto es algo muy concreto y lo normal es tener a HEAD apuntando a la rama actual, y al último commit.
Trucos para ver el valor de HEAD :
git show head
cat .git/HEAD
IMÁGENES DE AYUDA
HEAD APUNTANDO A RAMA MASTER
HEAD APUNTANDO A RAMA TESTING
AVANZAMOS UN NUEVO COMMIT EN RAMA TESTING
Fuente de las imágenes y más información : https://bit.ly/2PpqyNM