Viendo el éxito de la entrada en la que propongo una forma de gestionar las ramas de Git (que he de decir que la propuesta no es mía 😜, las cosas como son), he creído conveniente crear este post para que sirva de chuleta para aprender los comandos básicos de Git y no morir en el intento.
Pero antes de nada debes tener presente una cosa. A diferencia de otros sistemas de control de versiones, como SVN, en Git se suele trabajar con dos repositorios: uno local y otro remoto.
Como norma general, en tu copia local irás haciendo commits con regularidad y en él crearás las ramas feature/*
para tu trabajo diario (revisa el post cómo gestionar las ramas en Git si no sabes qué son estas ramas). Solo cuando tu código esté listo para compartir lo incluirás en el repositorio remoto. En este repositorio se encuentra el código del proyecto de todo el equipo (y si trabajas por tu cuenta, te servirá de copia de seguridad). Deberás actualizar tu repositorio local con el código del repositorio remoto para hacerte con una copia del código compartido por el resto de integrantes de tu equipo.
Ahora que ya tienes estos conceptos claros, veamos los principales comandos Git.
Comandos Git para crear un repositorio local
Para crear un repositorio local ejecuta el siguiente comando:
git init
Una vez creado, debes configurar el nombre y la dirección de correo electrónico con los que «firmarás» los commits del repositorio recién creado. Para ello ejecuta los siguientes comandos Git:
git config user.name "Tu nombre" git config user.email tu_direccion_de_email
Si quieres que esta información sirva para cualquier repositorio que configures en tu sistema, debes añadir la opción --global
. Yo no te la recomiendo, ya que quizá trabajes en distintos proyectos/equipos y tu dirección de email puede que sea distinta. En cualquier caso, el comando Git es:
git config --global user.name "Tu nombre" git config --global user.email tu_direccion_de_email
Integrando un repositorio remoto
Para integrar un repositorio local con un repositorio remoto debes ejecutar el siguiente comando Git:
git remote add origin <URL o PATH del repositorio remoto> #Ejemplo: git remote add origin https://github.com/j2logo/tutorial-flask.git
La palabra origin
no es obligatoria. Es el nombre con el que identificar al repositorio remoto (puedes añadir tantos repositorios remotos como quieras).
También puedes hacer un checkout o clonar un repositorio remoto directamente. Esto te ahorrará el paso de crear el repositorio local, ya que se crea automáticamente y quedará conectado al repositorio remoto. Para ello ejecuta:
git clone <URL o PATH del repositorio remoto> #Ejemplo: git clone https://github.com/j2logo/tutorial-flask.git
❗️ Recuerda configurar el nombre y el email con el que firmar los commits.
Comandos Git para confirmar los cambios: add y commit
Una vez que quieras confirmar los cambios en tu repositorio local hay dos pasos que debes seguir. En primer lugar debes indicar qué ficheros contienen los cambios que quieres confirmar, para lo que se usa el comando add
:
git add <nombre_fichero> # Para incluir todos los ficheros con cambios, ejecuta: git add .
Una vez que has indicado los cambios a confirmar, es hora de hacer un commit
:
git commit -m "Mensaje del commit"
Integrando los cambios en tu repositorio remoto
Cuando tu cambios en el repositorio local estén listos para ser integrados en el repositorio remoto, el comando a ejecutar es:
git push origin <nombre_rama_local>
❗️Recuerda que origin
es el nombre que le dimos al repositorio remoto.
Comandos Git para crear ramas
Las ramas nos permiten trabajar en distintas funcionalidades a la vez y en distintas versiones de nuestra aplicación sin que los cambios afecten de unas a otras. Para saber más acerca de las ramas, puedes echar un ojo a la entrada en la que explico cómo trabajar con ramas.
Para crear una rama y situarte en ella ejecuta:
git checkout -b <nombre_rama>
Si quieres cambiarte a otra rama existente:
git checkout <nombre_otra_rama>
Recuerda borrar una rama cuando ya no tengas que trabajar más en ella:
git branch -d <nombre_rama>
Fusionando el contenido de una rama en otra
Una vez que el trabajo en una rama secundaria de tu repositorio local ha terminado, debes integrar los cambios en una rama principal. Por ejemplo, de una rama feature
a la rama dev
. Para ello, debes hacer un merge
de la rama feature
desde dev
de la siguiente manera:
# Sitúate en dev git checkout dev # Ahora fusiona la rama feature-1 git merge feature-1
El comando para integrar los cambios del repositorio remoto a tu repositorio local es:
git pull
Comandos Git para deshacer los cambios: revert
Es posible que en alguna ocasión los cambios realizados no sirvan y quieras volver a la versión anterior de un fichero. En ese caso, ejecuta:
git checkout -- <nombre_fichero>
Para deshacer los cambios locales y commits y traer la última versión estable del repositorio remoto, los pasos son los siguientes:
git fetch origin git reset --hard <nombre_rama_remota> # Ejemplo: git reset --hard origin/dev
Mis recomendaciones
Los anteriores son los principales comandos Git que utilizarás en tu día a día a la hora de trabajar en tu repositorio. No obstante, quiero darte una serie de recomendaciones y trucos para que tu repositorio no se líe ni pierdas el trabajo realizado:
- Si es posible, sigue este flujo para gestionar las ramas de tu repositorio.
- Añade el fichero .gitignore nada más crear tu repositorio local para no ensuciar el repositorio con ficheros innecesarios.
- No incluyas en tu repositorio los ficheros de configuración de tu proyecto que crea el IDE de desarrollo.
- Haz commits con regularidad en tu repositorio local (siempre y cuando el código esté limpio de fallos).
- Solo integra tu repositorio local con el remoto (hacer un
push
) cuando el código esté realmente listo para compartir y libre de errores.
Para evitar conflictos en el repositorio, intenta seguir el flujo siguiente (es lo que a mí me ha funcionado):
# Clono de un repositorio remoto: Github, Gitlab, ... # Previamente he configurado este repositorio git clone <URL_repositorio_remoto> # Establezco los parámetros de mi usuario git config user.name "J2logo" git config user.email juanjo@j2logo.com # Creo la rama dev a partir de master git checkout -b dev # Pusheo la rama dev en el repositorio remoto git push origin dev # Cuando tengo que desarrollar algo, creo la # rama correspondiente git checkout -b feature/feature_1 # Voy haciendo commits sobre la rama feature_1 # hasta que la funcionalidad está terminada git commit -m "Msg 1" git commit -m "Msg 2" # Cuando la funcionalidad está lista, la paso # a la rama dev. Para ello, me sitúo en dev git checkout dev # Actualizo la rama dev con posibles cambios # en el repositorio remoto git pull origin dev # Ahora sí, integro los cambios de la rama # feature_1 en la rama dev git merge --no-ff feature/feature_1 # Pusheo la rama dev para que el resto del # equipo pueda ver los cambios git push origin dev # Borro la rama feature_1 porque ya no # me va a hacer falta git branch -d feature/feature_1 ...
Espero que estos consejos te sirvan de ayuda. Si es así:
👇🏻👇🏻👇🏻