Comandos de Git mas comunes

La mejor de las formas para aprender los comandos de Git es usarlos. De eso no queda ninguna duda. Por mucho que vayas a buscar la mejor de las guías, si encuentras ese comando que necesitas ahora, pero que nunca más vas a usar… es bastante probable que tu cabeza lo retenga el menor tiempo posible.

Dicho esto, nunca está de más saber cuáles son los comandos más usados o los más comunes porque Git tiene una infinidad de comandos con sus distintas opciones y usos, y puede llegar a ser demasiado si te estás iniciando en el mundo.

Si eres nuevo en Git o necesitas un repaso sobre sus fundamentos, te sugiero comenzar con mi Introducción a GIT, donde cubro los conceptos básicos y te guío paso a paso.

¡Vamos a ello!

Comandos de GIT mas comunes

Configuración básica

El fichero ~/.gitconfig contiene información de configuración de Git. Esta configuración puede ser modificada editando el fichero o ejecutando ciertos comandos que Git proporciona.

Establecer datos de usuario

git config --global user.email "your_email@example.com"

Ese comando le indica a Git que el email será your_email@example.com.

git config --global user.name "John Doe"

Ese comando le indica a Git que el nombre será John Doe.

Establecer rama por defecto

git config --global init.defaultBranch main

Ese comando le indica a Git que la rama por defecto sera main.

Configurar tu editor favorito para escribir los commit

git config --global core.editor "code --wait"

Ese comando le indica a Git que para operaciones como commits o tags, el editor a usar es VSCode editor.

Listar datos de configuración

git config --list

Ese comando de Git mostrará por pantalla los datos que hasta el momento están configurados.

Generar alias de utilidad

git config --global alias.co checkout

Ese comando de Git crea el alias co para indicar que hará lo que el comando real checkout realiza.

Puedes crear tantos alias como consideres para hacerte la vida más fácil a la hora de ejecutar los comandos de Git.

Iniciar un repositorio

Iniciar un nuevo repositorio

git init

Ese comando de Git inicia un repositorio Git en la localización de ejecución del comando.

Clonar un repositorio existente

git clone <url>

Ese comando de Git clona el repositorio de la url en la localización de ejecución del comando.

Añadir archivos al area de preparación

git add -A

Ese comando de Git añade todos los ficheros con cambios al denominado stage o area de trabajo, desde donde posteriormente se generarán las imágenes (commit).

Crear una imagen de los cambios

git commit -m "Mensaje del commit"

Ese comando de Git genera la foto del estado actual del área de trabajo y le pondrá el mensaje indicado.

Mostrar el estado de los archivos

git status

Ese comando de Git mostrará por pantalla el estado del repositorio local, listando los archivos que se han cambiado, los que ya han sido añadidos al stage o área de trabajo, los que aun no están añadidos… etc.

git log --online

Ese comando de Git mostrará por pantalla los diferentes commit realizados con su mensaje.

Subir a remoto los cambios de nuestro local

git push origin <branch-name>

Ese comando de Git subirá los cambios de tu repositorio local a la rama en remoto.

Gestionar ramas en GIT

Listar ramas

git branch

Ese comando de Git lista las ramas del repositorio local.

git branch -a

Ese comando de Git lista las ramas del repositorio local y del remoto.

Crear rama

git branch <branch-name>

Ese comando de Git crea la rama en el repositorio local.

Borrar rama

git branch -D <branch-name>

Ese comando de Git elimina la rama del repositorio local aunque la rama tenga cambios que no han sido fusionados.

Fusionar ramas

git merge <branch-name>

Ese comando de Git fusiona la rama indicada en la rama activa.

Caso de uso sencillo donde se crea una nueva rama, se añaden 2 commits y luego se integran en la rama main.

# Empezar una nueva feature desde la rama main
git checkout -b new-feature main
# Añadir el fichero file que ha sido editado al area de trabajo y hacer el commit
git add <file>
git commit -m "Start a feature"
# Añadir el fichero file2 que ha sido editado al area de trabajo y hacer el commit
git add <file2>
git commit -m "Finish a feature"
# Cambiar a la rama main
git checkout main
# Fusionar la rama new-feature en la rama actual (main)
git merge new-feature
# Eliminar la rama new-feature
git branch -d new-feature

Al hacer fusiones entre ramas es común que puedan aparecer conflictos que necesitan de una intervención humana para ser resueltos. Al ser algo más avanzado no será desarrollado aquí, pero puedes ir a este enlace de Atlassian donde explican más sobre el tema.

Gestionar repositorios remotos

Ver repositorios remotos

git remote -v

Ese comando de Git lista los repositorios remotos junto con sus URLs.

Ver ramas del repositorio remoto

git remote show origin

Ese comando de Git lista las ramas del repositorio remoto.

Conectar repositorio local a servidor remoto

git remote add origin <host-or-remoteURL>

Ese comando de Git añade al servidor el repositorio local.

Cambiar de repositorio remoto

git remote set-url origin <host-or-remoteURL>

Ese comando de Git cambia de servidor remoto, apuntando a la nueva url indicada.

Desconectar repositorio local de servidor remoto

git remote rm <host-or-remoteURL>

Ese comando de Git desconecta del servidor remoto el repositorio local.

Actualizar repositorio local

git pull

Ese comando de Git actualiza la rama local con los cambios que haya en remoto.

Es algo que siempre deberíamos hacer antes de tratar de empujar a remoto ningún cambio.

Revertir cambios

En ocasiones necesitamos revertir cambios que ya hemos hecho. Estos comandos tienen que ser usados con cuidado para no perder información que sí que queríamos. Con el comando de abajo nos aseguramos que esto no ocurra.

git revert <commit_id>

Ese comando de Git tomará la imagen del commit especificado, invertirá los cambios y creará una nuevo commit.

El comando git revert es una operación de deshacer avanzada que ofrece un método seguro para deshacer cambios. En lugar de eliminar o dejar huérfanas los commit en el historial de commits, un revert creará un nuevo commit que invierte los cambios especificados.

El GIT básico, básico

Yo soy un tanto idiota, y recordar según qué comandos es una tarea muy pero que muy difícil para mi pobre memoria.

Así que si eres de los míos, igual te interese leer esta sección, donde te voy a exponer un pequeño ‘hack’ para quizás hacerte la vida algo más sencilla cuando uses git.

Se trata de crear ciertos alias que harán que no tengas que recordar comandos con largas opciones. Los alias es algo que se puede configurar como vimos en la sección de Generar alias de utilidad.

git config --global alias.mainbranch "!git remote show origin | sed -n '/HEAD branch/s/.*: //p'"
git config --global alias.synced "!git pull origin $(git mainbranch) --rebase'"
git config --global alias.update "!git pull origin $(git rev-parse --abbrev-ref HEAD) --rebase"
git config --global alias.squash "!git rebase -v -i $(git mainbranch)"
git config --global alias.publish "push origin HEAD --force-with-lease"
git config --global alias.pub "publish"

Publicar los cambios de tu rama al repositorio remoto

git publish o git pub publicaría los cambios presentes en tu rama local en el repositorio de remoto. Recuerda que siempre antes de publicar cambios deberías haber hecho un pull y resolver los conflictos en caso de que los hubiera.

Sincronizar tu rama local con main de remoto

git synced mantendría tu rama actualizada con los cambios de la rama main o master de remoto. Lo conseguiría haciendo un fetch y luego haciendo un rebase, poniendo los commit de tu rama después del último commit presente en remoto.

Sincronizar tu rama local con los cambios de la misma rama en remoto

git update traería a tu local los cambios presentes en la misma rama en remoto.

Unificar commits

git squash te da la oportunidad de reescribir los commit transformándolos en mensajes quizás más sensatos o definidos antes de hacer el merge definitivo.