Si reviso una versión etiquetada de mi código fuente sin crear una rama, Git indica que no estoy asociado con ninguna rama. Sin embargo, me complace permitirme hacer cambios y registrarlos. ¿A dónde van esos cambios? Si cambio a 'master' desaparecen (sobrescritos por lo que estaba en el master) y parece que no puedo volver a encontrarlos. ¿Lo que da? Si Git me permite realizar cambios contra lo que es esencialmente una rama anónima, ¿puedo recuperarlos?Git commit against tag sin rama
Respuesta
Debido a que su confirmar no está en ninguna rama, no se puede ver en el directorio de trabajo a menos que usted la comprobación de que se comprometan específica , usando su SHA1. Puede encontrar el compromiso mirando el reflog
que rastrea los cambios en lo que ha desprotegido del repositorio. Si la etiqueta era XXX
verá algo como:
$ git reflog
7a30fd7... [email protected]{0}: checkout: moving from master to XXX
ddf751d... [email protected]{1}: checkout: moving from 96c3b0300ccf16b64efc260c21c85ba9030f2e3a to master
96c3b03... [email protected]{2}: commit: example commit on tag XXX, not on any branch
7a30fd7... [email protected]{3}: checkout: moving from master to XXX
que le indica el SHA1 que tendría que checkout
con el fin de ver a su cometen en el directorio de trabajo.
$ git checkout 96c3b03
Note: moving to "96c3b03" which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 96c3b03... example commit on tag XXX, not on any branch
$ git checkout -b newbranch
$ git branch #lists all branches
feature1
master
* newbranch
Todo esto parecía un poco raro para mí al principio, hasta que me di cuenta de que git checkout
coloca todos los archivos de proyecto como de un particular, se comprometen en mi sistema de archivos (directorio de trabajo). En efecto, el directorio de trabajo actúa como un navegador en el repositorio local de Git. Por lo tanto, sus cambios no han sido sobrescritos en el repositorio, simplemente no se muestran en su directorio de trabajo cuando ha revisado el maestro.
Sí, estarán en reflogs.
Se puede nombrar a la rama en cualquier momento como este:
git checkout -b my-branch-name
Para responder a la segunda pregunta que tendría que utilizar git restablecer yourtagname --hard
En cuanto a lo que sucedería en forma de horquilla que esencialmente su sucursal en el nombre de etiqueta y se quedó en la misma rama. Tus compromisos en el tenedor viejo siguen ahí ... son difíciles de ver. Puede que tenga que usar el reflog para encontrar el tenedor viejo.
Alternativamente, puede combinar el envío de datos de nuevo en maestro sin una nueva rama encontrando su SHA1 (usando git reflog que el anterior) y luego:
git checkout master
git merge SHA1
- 1. git branch (sin rama)
- 2. convirtiendo git branch en git tag
- 3. git - mover la rama "tag" a otra confirmación?
- 4. Git: Cómo deshacer commit * y * revertir a la última rama
- 5. Encontrar qué rama ha cometido un commit de git desde
- 6. Git: restablecer otra rama a la actual sin un checkout
- 7. Eliminar un antiguo commit Git de una rama sin usar un parche reverso?
- 8. git - configuración de un padre de commit sin rebase
- 9. revirtiendo push'd git commit
- 10. Referencia Git branch start commit
- 11. Cómo hacer commit git --mendar un commit que es la base de una rama
- 12. "git checkout tag-name" frente a "git reset --hard tag-name"
- 13. ¿Cómo cerrar una rama SIN eliminarla del historial en git?
- 14. git commit directorio
- 15. Git: ¿Cómo pasar de "sin rama" a una nueva rama remota?
- 16. Bad commit to Git
- 17. Buscar primer commit específico para una rama
- 18. Script Git commit bash
- 19. git commit - format?
- 20. git commit problems
- 21. Git Commit Generation Numbers
- 22. git commit -a confusion
- 23. git find fat commit
- 24. git: eliminar 2nd commit
- 25. Lost Last Git Commit
- 26. Git commit from python
- 27. Git eliminar commit raíz
- 28. delete first git commit
- 29. ¿Dónde estoy? * (sin rama)
- 30. Git comprometer ganchos por rama
Nota mental: A continuación, hacer checkout master ' 'git, 'git merge newbranch',' git branch -d newbranch' y 'git push'. – Znarkus
O incluso simplier sin crear una rama: 'git checkout master' y luego' git merge 96c3b03' (reemplace con el SHA1 correcto encontrado por 'git reflog'') (como la solución de [gjvis bramido] (http://stackoverflow.com)/a/8760749/535203)) –