Esto es lo que pasó:
Tengo una rama A. En la rama AI cometí un montón de cambios. No estaba contento con el código, así que revisé el commit anterior en la rama A. Luego realicé muchos cambios más y los confirmé en la rama A. Ahora no puedo encontrar este commit en ningún lado. ¿Perdí este código?
git reset
lugar degit checkout
?HEAD
y la rama A se habría quedado en la confirmación anterior. ¿Qué comandos ejecutaste exactamente?Respuestas:
El viejo commit todavía está en el registro de nuevo.
Esto mostrará una lista de confirmaciones, y la confirmación "perdida" debería estar allí. Puedes convertirlo en una nueva sucursal. Por ejemplo, si el SHA-1 es ba5a739, entonces puede hacer una nueva rama llamada "nueva rama" en la confirmación anterior con:
Tenga en cuenta que las confirmaciones "perdidas" se eliminarán cuando se elimine la base de datos.
fuente
git cherry-pick [SHA]
para mover el commit a una rama existente en caso de que accidentalmente cometió mientras estaba en estado de cabeza separadaprune
eliminaría las confirmaciones también separadas que se mencionan en los mensajes de confirmación? ¿O eso los hace accesibles ?Sus confirmaciones aún están disponibles en el registro de registro, como ya se señaló. Además de las otras respuestas, aquí hay una manera de hacerse cargo de los compromisos HEAD separados directamente en su rama actual , sin crear y fusionar una nueva rama:
Busque los hash SHA-1 de las confirmaciones que realizó en estado HEAD separado con
Luego ejecute, con todos los hashes de confirmación ordenados de más antiguo a más reciente:
Por ejemplo, si tuviera solo uno, dado en el formato de hash corto "primeros 7 caracteres":
Esto creará nuevos commits para su rama actual, un commit por hash de HEAD-commit separado que usted menciona en el comando. También se hace cargo de los mensajes de confirmación originales.
fuente
Puede encontrar confirmaciones perdidas (colgantes) con el siguiente comando:
Tenga en cuenta que si su cabeza actual está colgando commit, no aparece como perdido.
Puede encontrar más información en la página del manual de git-fsck (1)
Luego puede crear una rama en ese commit perdido:
fuente
El lenguaje Git para el estado de su directorio de trabajo es un " HEAD separado ". Aquí hay otro lugar que
git reflog
hace la salvación.Si trato de pagar una rama diferente, git-1.7.5.1 da una sugerencia útil.
fuente
No lo perdió, Git aún conserva una copia (pero actualmente no es accesible para ningún jefe de sucursal). Puedes encontrar tu commit faltante usando el
git reflog
comando. El registro de registro realiza un seguimiento de las posiciones históricas de una cabeza de rama, y puede usarlo para encontrar cosas a las que la cabeza de la rama apuntaba anteriormente.fuente
Siga estos pasos para vincular su cabeza separada con git repo
git checkout "your branch with path but without remote name"
por ejemplo, si el nombre remoto es el origen y el nombre de la sucursal,
bugfix/somebranch
entonces usegit checkout bugfix/somebranch
git reflog
obtenga los SHA de confirmación que figuran en su lista de confirmación de rama separada.git cherry-pick "commit hash1" "commit hash2" "commit hash3"
git push
¡¡TODO LISTO!!
fuente
En Sourcetree, descubrí que git reflog no funcionaba, así que descubrí cómo hacerlo usando la GUI.
Primero, intente encontrar la confirmación "perdida" buscando un mensaje en el Historial de comandos (ver: Mostrar salida de comando). Esperemos que esté en el comando "Switching Branch" después de la confirmación que perdió y verá el comentario de confirmación con una ID de confirmación 1234567.
Lleve esa ID de confirmación al siguiente paso.
Pulse el botón "Rama" en la barra de herramientas superior y debería obtener un cuadro de diálogo "Nueva rama" donde puede especificar una determinada confirmación. ¡Ingrese esa ID de confirmación allí, especifique un nuevo nombre de rama, presione Crear rama y debería obtener una nueva rama con su confirmación perdida!
¡Esto me trajo algo de trabajo perdido!
fuente