No se puede 'volver a conectar' HEAD git separado

Tuve una bug-fix twig que se cortó de otra twig develop

Después de combinar mis cambios de la bug-fix de bug-fix en el develop , eliminé la twig a través de github, sin embargo, creo que todavía estaba registrado en la sucursal cuando lo borré.

También tenía un file sin seguimiento en la bug-fix la sucursal

Después bug-fix supuestamente se eliminó la bug-fix verifiqué el develop y vi a HEAD detached at develop

Aquí está todo lo que he intentado para arreglar la cabeza separada:

1) En primer lugar, la bug-fix la sucursal que se eliminó y que ya no aparece en github todavía aparece cuando ejecuto git branch Por lo tanto, traté de hacer git fetch para actualizarlo. Todavía aparece

2) Comprobé la bug-fix y eliminé el file sin seguimiento

3) Intenté crear una nueva temp twig y luego eliminarla

Si vio la cadena de text literal:

 HEAD detached at develop 

(por ejemplo, en la salida de git status ), esto significa que el nombre develop no es una twig . (Más precisamente, no es un nombre de twig: el término "twig" es ambiguo, en Git. Ver ¿Qué queremos decir exactamente con "twig"? )

Por ejemplo, en este repository de Git para Git, si ejecuto:

 $ git checkout v2.10.0 Note: checking out 'v2.10.0'. [snip] HEAD is now at 6ebdac1... Git 2.10 $ git status HEAD detached at v2.10.0 nothing to commit, working tree clean 

Esto se debe a que el nombre v2.10.0 es una label , no una twig.

Para volver al master (que es un nombre de twig) simplemente:

 $ git checkout master Previous HEAD position was 6ebdac1... Git 2.10 Switched to branch 'master' Your branch is up-to-date with 'origin/master'. 

Los nombres de las sucursales, en Git, en realidad no son muy importantes a largo ploop. En el corto ploop (mientras trabajas) son importantes y útiles, pero eventualmente una twig como fix-bug-1234 o test-new-feature funciona o se incorpora a una twig de desarrollo o lanzamiento de larga duración y por lo tanto, se elimina, o resulta ser un error y se elimina por completo, o se "ignora fusionada" para terminar como un callejón sin salida, y luego se elimina su nombre.

Lo que importa son los commits

En Git, lo único que realmente importa son los compromisos mismos.

Un nombre de sucursal simplemente sirve como una forma de encontrar commits. Lo mismo es cierto para un nombre de label. Cada nombre le permite a Git encontrar un compromiso, el nombre almacena los grandes hashes feos como 6ebdac1... y los commits mismos permiten a Git encontrar commits previos.

La diferencia key entre un nombre de twig y un nombre de label es que se supone que un nombre de twig se mueve, y de hecho, se moverá automáticamente a medida que realiza nuevos commits en la twig. Para ello, git checkout branch-name te pone "en" la twig, por lo que Git sabe mover la twig cuando ejecutas git commit .

Cualquier otro nombre, Git principalmente trata como un nombre para la identificación de hash sin formatting. Estos le dan una "CABEZA separada". Para propósitos de git status , Git intenta recordar el nombre que usaste para entrar en este estado de "HEAD separado". Pero es la identificación lo que realmente importa.

Cuando elimina un nombre de sucursal, los commits permanecen por un time, generalmente al less 30 días. Puede encontrar sus identificaciones en los "reflogs" de Git. Esto es una especie de dolor en el trasero, porque si ejecutas git reflog obtienes un montón de cosas que son difíciles de search. Pero los commits aún están ahí. Solo tiene que encontrar la (s) que le interesan (use, por ej., git show 08bb350 para ver la confirmación 08bb350 ) y " 08bb350 ":

 $ git branch zombie 08bb350 

por ejemplo, si la confirmación que desea volver, como una twig, es 08bb350 .