2011-07-16 18 views
39

Estaba tratando de solucionar un problema en git y accidentalmente utilicé el restablecimiento de git --hard a alguna confirmación anterior. Así que ahora no puedo volver al viejo jefe.Git lost commits

Sin embargo, hice la clonación del repositorio antes de hacerlo, así que devolví las confirmaciones faltantes al original. Esto pareció funcionar ayer, pero hoy veo que el original todavía está atascado en un antiguo compromiso y los nuevos aparentemente no existen. Intentar volver a presionar los nuevos commits desde el clon no funciona, ya que git me dice que todo está actualizado.

¿Cómo puedo solucionar esto?

Respuesta

58

Para obtener su cabeza en el lugar correcto:

  1. git reflog para obtener una lista de donde la cabeza tiene habido últimamente.
  2. git show sha1 para encontrar el lugar que desea que sea su HEAD.
  3. Una vez que encuentre la confirmación que desea, git merge para recuperar a su maestro en el lugar correcto.

Algunas explicaciones: En un compromiso git no hay nada que apunte un compromiso con el que sucedió después. Cuando restablece HEAD, lo apuntó a una confirmación anterior. Su cabeza anterior ahora es colgando sin que nada lo señale.

Usamos reflog para ver dónde HEAD ha estado últimamente. Una vez que vuelva a colocarse donde lo desee, apunte con el maestro, o alguna otra rama, hacia ese punto y ¡todo estará bien!

+2

'git cherry-pick the sha1's' –

5

No debería necesitar enviar nada desde otro repositorio después de git reset --hard.

git reflog deben permitirá localizar las confirmaciones perdidos (que en realidad son sin referencias, pero todavía existe en tu repositorio Git, de forma predeterminada hasta 90 días: ver git config gc.reflogexpire Incluso puede make sure it never expires si realmente quiere eso.).
Ver por ejemplo Undoing a git reset --hard HEAD~1 o restore - git reset --hard HEAD^ como ejemplos.

-8

intenta escribir git fetch para obtener el repositorio actualizado

24

Lo hice un poco diferente. Lo hice ...

git reflog 
3bd79d2 [email protected]{2}: checkout: moving from edbfb06528c43586a0e0e10a73051e06980b9281 to master 
edbfb06 [email protected]{3}: commit: added general comments for rubric 
f8ca172 [email protected]{4}: checkout: moving from 904d63bf08f6f6b1494bfa473b158b9509b18423 to 
904d63b [email protected]{10}: commit: updated results page and csv 
933f2a6 [email protected]{11}: commit: updates 
f56e6cd [email protected]{12}: clone: from [email protected]:xxxx.git 

... en este caso mis "comentarios generales agregados para la rúbrica" ​​fue la comisión que perdí. Ahora que tengo la ID de confirmación que usé cherry-pick para recuperarla ...

git cherry-pick edbfb06 
Cuestiones relacionadas