Herramientas de usuario

Herramientas del sitio


informatica:programacion:cursos:control_version_git_avanzado:commits

¡Esta es una revisión vieja del documento!


Commits

Sección perteneciente al curso Control de versiones con Git Avanzado.

Introducción

Una de las unidades más importantes. Veremos cómo preparar un commit. Un commit no es un backup sino un momento concreto en la historia de cambios de nuestro proyecto. Una de las características más potentes de Git es que nos permite preparar el commit, qué ficheros van a ir a un commit y cuáles no.

También veremos cómo ver commits del pasado y cómo deshacerlos.

Preparación de un commit por etapas

Trabajando con el stage

Tanto para añadir nuevos archivos al repositorio (empezar a versionar) como para añadir modificaciones en archivos ya existentes, tendremos que “subirlos al stage”:

git add <RUTA>

Para inicializar un repositorio, es decir, que Git pueda empezar a trabajar con él, ejecutamos dentro del directorio el comando git init. A partir de entonces ya podremos usar git.

Cuando queremos “subir al stage” un archivo:

git add archivo

Si queremos añadir más de un archivo:

git add archivo1 archivo2 archivo3

Si queremos añadir un tipo de ficheros:

git add *.html

Para subir todos los archivos y modificaciones pendientes de pasar al stage y que estén en la carpeta actual (y todas las carpetas hijas):

git add .

Para ver información sobre las 3 zonas que usamos en Git, usamos el siguiente comando:

''git status''

Podemos ver un resumen de los ficheros que están en el stage y los que no están siendo controlados (versionados) por git. Los primeros aparecen en color verde y los segundos en color rojo. Otra forma de decirlo sería que lo que está en verde es lo que está en el stage y lo que está en rojo es lo que está en el working directory.

Poner captura con ejemplo de lo anterior

git status es un comando muy útil y es recomendable lanzar cada vez que ejecutemos algún comando de git. También ofrece “pistas”.

Si queremos quitar modificaciones del stage (por algún error):

git reset HEAD <RUTA_FICHERO>

Por ejemplo, si queremos quitar el fichero fichero1:

git reset HEAD archivo1

Si queremos quitar todos los cambios que haya en el stage:

git reset HEAD .

En realidad, el comando git reset sirve para otra cosa que se verá más adelante.

Para deshacer cambios en el working directory, es decir, para que Git deje los archivos modificados como estaban en el último commit:

git checkout -- <RUTA_FICHERO>

Por ejemplo, si queremos volver al estado anterior de todos los archivos del working directory:

git checkout -- .

Esta operación es irreversible, no se puede deshacer.

Finalmente, si queremos borrar un archivo tenemos dos opciones. Si el borrado lo hacemos mediante las operaciones del sistema operativo, Git lo entiende como una modificación del proyecto y podremos subirlo al stage para luego hacer un commit con ese borrado.

Si usamos el método Git:

git rm <RUTA_FICHERO>

Git lo borra del sistema de ficheros y añada esa modificación al stage, ahorrándonos un paso respecto a la versión usando el sistema operativo.

Si queremos quitar un archivo del repositorio sin borrarlo del working directory:

git rm --cached <RUTA_FICHERO>

Esto es útil cuando llegado un momento queremos empezar a ignorar un fichero que antes estábamos siguiendo (el .gitignore aquí no serviría).

Tras “desversionar” lo que queremos, ahora sí podremos modificar el .gitignore para añadir ese fichero o ficheros que no queremos que Git versione.

Realizando el commit

Un commit siempre necesita un mensaje descriptivo (es obligatorio):

git commit -m "Mensaje"

Si queremos que abra el editor por defecto para que luego añadamos el comentario:

git commit

El commit siempre se hace sobre lo que hay en el stage

Como recomendación, en los mensajes de commit habría que evitar genéricos como “Cambios”, “Nuevo archivo”, “Correcciones”, “CSS”, “Merge”… A la hora de escribir un mensaje, tenemos que explicar bien qué modificaciones sufre el proyecto y de forma muy breve. El propósito es que cuando se quiera ver el log, se pueda entender perfectamente los cambios que ha sufri oel proyecto:

git log --oneline --branches --graph

Si queremos modificar el último commit (solo el último) que hemos hecho:

git commit --amend

Esto lo haremos tras añadir cambios al stage.

Al ejecutar el comando anterior, se abrirá el mensaje del último commit (el que queremos modificar) dándonos la posibilidad de modificarlo, si queremos.

Si el commit ya se había subido al repositorio remoto, no se debe hacer --amend. Las correcciones en los commits hay que hacerlas en el repositorio local.

Otra cosa que suele pasar mucho es que hayamos hecho un commit con un mensaje incorrecto o incompleto. Si queremos corregir este mensaje, pero no tenemos más cambios, no hace falta subir nada al stage, basta con ejecutar el siguiente comando:

git commit --amend -m "Nuevo mensaje"

Si no le pasamos el mensaje por línea de comandos, git abrirá el editor por defecto.

Esta modificación cambia el hash del commit. Esto es normal porque este hash se genera a partir del contenido del título y otras cosas.

Ejemplos de commits por etapas

Añadir capturas de pantalla con las zonas de git y cómo se mueven los archivos cuando se preparan los commits.

Iniciamos un repositorio git:

git init
git status

Subiremos al stage el fichero despedidas-en.json:

git add despedidas-en.json
git status

Hacemos commit:

git commit -m "Commit inicial"

Es práctica habitual incluir el mensaje “Commit inicial” en el primer commit de un proyecto

git log --oneline --branches
git status

Subimos el fichero saludos-en.json al stage:

git add saludos-en.json

Hacemos el commit:

git commit -m "Añadidas traducciones de saludos"
git log --oneline --branches

Modificamos el fichero saludos-en.json. Ahora git reconocerá que hay un cambio en el working directory:

git status

Subimos el fichero al stage:

git add saludos-en.json

Hacemos el commit:

git commit -m "Añadida despedida"

Vemos el log:

git log --oneline --branches

Creamos un nuevo fichero en el working directory: lugares-en.json. También hacemos modificaciones en el fichero saludos-en.json. Git nos avisará de estos cambios.

git status

Añadiremos al stage solo dos ficheros:

git add lugares-en.json despedidas-en.json

Hacemos commit:

git commit -m "Añadido fichero de lugares y añadido saludo"

Vemos el log:

git log --oneline --branches

Subimos al stage saludos-en.json modificado.

git add saludos-en.json

Pero nos arrepentimos, y lo quitamos del stage:

git reset HEAD saludos-en.json

Git nos dirá que aún está pendiente el cambio de ese fichero en el working directory:

git status

Pero si queremos volver a la versión del último commit del fichero saludos-en.json:

git checkout -- .

Recordad que este último comando es irreversible

Partes de un commit

El log

Comandos para trabajar con el log

Saltos entre commits, reset y reflog

Apartar cambios con stash

Cómo deshacer

Conclusión

Recursos

informatica/programacion/cursos/control_version_git_avanzado/commits.1685529326.txt.gz · Última modificación: por tempwin