informatica:programacion:cursos:control_version_git_avanzado:commits
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:programacion:cursos:control_version_git_avanzado:commits [2023/05/31 20:09] – tempwin | informatica:programacion:cursos:control_version_git_avanzado:commits [2023/06/16 17:11] (actual) – tempwin | ||
|---|---|---|---|
| Línea 75: | Línea 75: | ||
| git reset HEAD archivo1 | git reset HEAD archivo1 | ||
| </ | </ | ||
| + | |||
| + | <WRAP center round tip 60%> | ||
| + | También se puede emplear '' | ||
| + | </ | ||
| + | |||
| Si queremos quitar todos los cambios que haya en el stage: | Si queremos quitar todos los cambios que haya en el stage: | ||
| Línea 503: | Línea 508: | ||
| <WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
| - | Esto es muy útil cuando Git no nos deja movernos | + | Esto es muy útil cuando Git no nos deja cambiarnos |
| </ | </ | ||
| Línea 532: | Línea 537: | ||
| </ | </ | ||
| - | Para sacar los cambios del stash y colocarlos en el working directory | + | Para sacar los cambios del stash y colocarlos en el working directory |
| < | < | ||
| Línea 551: | Línea 556: | ||
| ===== Cómo deshacer ===== | ===== Cómo deshacer ===== | ||
| + | |||
| + | Algo muy importante de Git es que casi todo se puede deshacer. Todo lo que vaya a un commit quedará para la historia (hasta que llegue el recolector de basura). | ||
| + | |||
| + | Repasemos varias maneras de deshacer cambios. | ||
| + | |||
| + | ==== Cambios en el working directory ==== | ||
| + | |||
| + | Deshacer cambios en el **working directory** (todos los cambios): | ||
| + | |||
| + | < | ||
| + | git checkout -- . | ||
| + | </ | ||
| + | |||
| + | <WRAP center round important 60%> | ||
| + | Recordemos que el anterior comando es de las pocas cosas en git que no se pueden deshacer. | ||
| + | </ | ||
| + | |||
| + | ==== Cambios en el stage ==== | ||
| + | |||
| + | Deshacer lo que haya en el **stage**: | ||
| + | |||
| + | < | ||
| + | git reset HEAD . | ||
| + | </ | ||
| + | |||
| + | <WRAP center round info 60%> | ||
| + | Ahora sabemos que el uso principal de '' | ||
| + | </ | ||
| + | |||
| + | ==== Deshacer commits ==== | ||
| + | |||
| + | < | ||
| + | git reset < | ||
| + | </ | ||
| + | |||
| + | Deshacer un '' | ||
| + | |||
| + | < | ||
| + | git reflog | ||
| + | </ | ||
| + | |||
| + | Así vemos los commits ocultos porque vemos los movimientos de HEAD. Cuando lo hayamos identificado, | ||
| + | |||
| + | < | ||
| + | git checkout < | ||
| + | </ | ||
| + | |||
| + | Esto nos pondrá en el modo " | ||
| + | |||
| + | < | ||
| + | git branch -f master | ||
| + | </ | ||
| + | |||
| + | Suponiendo que la rama '' | ||
| + | |||
| + | < | ||
| + | git checkout master | ||
| + | </ | ||
| + | |||
| + | Podemos pensar que para recuperar un commit " | ||
| + | |||
| + | ==== Deshacer un reset ==== | ||
| + | |||
| + | Tras hacer un reset, los commits desaparecen de nuestra vista, pero podemos recuperarlos. Los podemos ver con: | ||
| + | |||
| + | < | ||
| + | git reflog | ||
| + | </ | ||
| + | |||
| + | E identificamos el último commits de los que queremos recueprar. | ||
| + | |||
| + | Ahora nos llevaremos HEAD y master del momento actual a ese último commit que queremos recuperar: | ||
| + | |||
| + | < | ||
| + | git checkout < | ||
| + | </ | ||
| + | |||
| + | Ahora llevaremos la rama: | ||
| + | |||
| + | < | ||
| + | git branch -f master | ||
| + | </ | ||
| + | |||
| + | Para enlazar HEAD con master (y salir de " | ||
| + | |||
| + | < | ||
| + | git checkout master | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | Poner ejemplos de todo lo anterior | ||
| + | </ | ||
| + | |||
| + | ==== Resolver problemas derivados del detached HEAD ==== | ||
| + | |||
| + | Cuando por ejemplo estamos haciendo commits en estado " | ||
| + | |||
| + | < | ||
| + | git log --oneline --graph | ||
| + | </ | ||
| + | |||
| + | No ponemos '' | ||
| + | |||
| + | Para solucionarlo, | ||
| + | |||
| + | < | ||
| + | git branch -f master | ||
| + | </ | ||
| + | |||
| + | Nos quedaría la asociación de HEAD con master, es decir pasar de '' | ||
| + | |||
| + | < | ||
| + | git checkout master | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo 60%> | ||
| + | Poner ejemplos de todo lo anterior | ||
| + | </ | ||
| + | |||
| + | Otra situación que se nos puede dar es que hagamos un commit en un estado anterior al commit en el que está la rama master. | ||
| + | |||
| + | Eso origina un nuevo itinerario, pero es un itinerario que está fuera de la rama master (no tiene ninguna referencia de rama asociada). Si nos cambiamos de rama, el itinerario anterior quedará oculto a la vista. | ||
| + | |||
| + | Para recuperar, nos ayudamos de: | ||
| + | |||
| + | < | ||
| + | git reflog | ||
| + | </ | ||
| + | |||
| + | Identificamos el commit que nos interesa y | ||
| + | |||
| + | < | ||
| + | git checkout commit | ||
| + | </ | ||
| + | |||
| + | Hemos vuelto al " | ||
| + | |||
| + | < | ||
| + | git branch experimento | ||
| + | </ | ||
| + | |||
| + | Ahora ya aparece el itinerario en los logs. | ||
| + | |||
| + | Seguimos en " | ||
| + | |||
| + | < | ||
| + | git checkout experimento | ||
| + | </ | ||
| + | |||
| + | ==== Ignorar archivos que ya están siendo versionados ==== | ||
| + | |||
| + | Borrar del repositorio, | ||
| + | |||
| + | < | ||
| + | git rm --cached < | ||
| + | </ | ||
| + | |||
| + | El archivo dejará de estar versionado. Luego podremos añadirlo a un '' | ||
| ===== Conclusión ===== | ===== Conclusión ===== | ||
| + | |||
| + | Hemos visto cómo se preparan los commits: en el stage. Al hacer un commit, " | ||
| + | |||
| + | Los commits no se hacen periódicamente, | ||
| + | |||
| + | '' | ||
| ===== Recursos ===== | ===== Recursos ===== | ||
informatica/programacion/cursos/control_version_git_avanzado/commits.1685556575.txt.gz · Última modificación: por tempwin
