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.