Git: parecía estar en "(sin rama)" y luego perdí mis cambios


11

Estaba tratando de pasar de mi espacio de trabajo de Git a Github, pero mis cambios agregados y comprometidos no parecían cargarse.

Luego, haciendo una "rama git" obtuve algo que se parecía a esto:

git branch
* (no branch)
  master

Tontamente, pensé que podría volver a ser maestro con

git checkout master

y ahora mis cambios parecen haberse ido. Mi rama maestra tiene aproximadamente un día. Y parece que no hay forma de volver a esto (sin rama).

¿Se pierden mis cambios? ¿O hay alguna forma de recuperarlos?

Respuestas:


13

Mientras no hayas hecho nada git gc, entonces no has perdido nada. Todo lo que necesitas hacer es encontrarlo de nuevo :) ¿Qué obtienes con:

git reflog show

Eso debería mostrar lo que sucedió y la identificación de los nodos faltantes.


2
Haría git reflog sin especificar el maestro. Es posible tener commits que no están vinculados a una rama, y ​​en este caso, eso es probablemente lo que sucedió. Puede pagar una confirmación en una nueva rama para que tenga una ruta hacia ella.
Jeff Ferland

Tienes razón, probablemente mejor así. Mi suposición de la pregunta había sido que estaba en master para el commit. He actualizado mi respuesta.
CK.

¡Gracias! Cometí un gran alijo sin rama, luego cambié a maestro para fusionarlo ... y desapareció mi referencia.
Pascal

Han pasado muchos años, pero yo también me metí en esto. Volví a la rama maestra y, de repente, poof. Todos mis 2 días de trabajo (es decir, 8 horas al día) se fueron. Muchas gracias!
Falgantil

5

La respuesta anterior es correcta. Esto es lo que hice:

$ git reflog
5b35f6d HEAD@{1}: pull github master: Fast forward
ca92d15 HEAD@{2}: checkout: moving from 759dab1b15731ce7680c26839ca470d20e709e36 to master
759dab1 HEAD@{3}: commit (merge): Merge branch 'master' of github.com:gonzojive/IODB-ui into HEAD
065e269 HEAD@{4}: commit: added fieldsets to snazzy form
f357606 HEAD@{5}: commit: preliminary support for google maps.
ca92d15 HEAD@{6}: checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

$ git checkout ca92d15d272867b63d54f96d4aa57f8ecc479cd0

El "¡Oh, no!" momento es este:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 es la rama anónima que aparece como (sin rama). Para volver a ello, solo haz un checkout de git y se restaurará tu antiguo pseudobranquio.

Recomiendo hacer una copia de seguridad de su repositorio git antes de que accidentalmente lo gc, solo por tranquilidad.


Simplemente revisar la sucursal no funcionó para mí. Mis cambios se realizaron correctamente en mi rama de características. Aún así no podía verlos en mi espacio de trabajo. Debo haber perdido mis cambios de alguna otra forma. Sin embargo, podría recuperar mis cambios ejecutando git reset --hard <commit-id>. El id de confirmación es el código alfanumérico en la primera columna de git reflog. Ver effectif.com/git/recovering-lost-git-commits .
Torsten

2
# if you have already checked out to master, 
# you won't know the commit-ish of your "no branch":

git fsck --lost-found # (to find your <commit-ish>)
git merge <commit-ish>

# if you are still on your "no branch" commit:

git log # (the commit-ish will be on the first line)
git checkout master
git merge <commit-ish>

# or

git log | head -n 1 | cut -d ' ' -f 2 | pbcopy
git checkout master
git merge <commit-ish>

De muchas maneras, incluida la lista de revoluciones, solo fsck ayudó a encontrar commit sin sucursales. Muchas gracias.
temoto
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.