Comandos Esenciales de Git
A continuación se muestran algunos de los comandos de git más utilizados
Clone
Útil para clonar un repositorio en algún servidor Github, GitLab u otros.
git clone urldorepositorio.git
Es posible también clonar un repositorio local pasando la carpeta en lugar de la url
# clonar el proyecto x al proyecto y
git clone carpeta/x carpeta2/y
para más información
https://git-scm.com/docs/git-clone
Comando Add
Para rastrear los archivos y pasarlos a stage se utilizan los posibles comandos siguientes.
git add nombredelarchivo
# para más de un archivo
git add nombrearchivo1 nombrearchivo2
Agregar todos los archivos
git add -A
git add --all
Agregar solamente los archivos del directorio actual.
git add .
El comando inverso del add es el rm que sirve para remover los archivos. Con git rm puedes quitar el rastreo de un determinado archivo o incluso devolver un archivo del estado de staged a unstaged.
# removerá de este directorio
git rm ./dir
# -r es recursivo para recorrer todos los directorios debajo de este
git rm -r ./dir
# solamente una lista de archivos
git rm arq1 arq2
# removerá de staged y pasará a unstaged
git rm --cached arq1
.gitignore
Si creas un archivo .gitignore en la raíz de tu proyecto, todos los archivos o directorios listados allí serán ignorados durante el comando add. Permanecerán siempre fuera del rastreo de git.
Ejemplo de .gitignore:
*.bmp (excluye todos los archivos de esta extensión)
bla/*.bmp (excluye todos los archivos de esta extensión en la carpeta bla)
Comando LS
Comando para listar archivos que están siendo rastreados, es decir, que ya fueron agregados
git ls-files -s
git ls --stage
Muestra solamente los archivos modificados
git ls-files -m
git ls-files --modified
Muestra la lista de los archivos no rastreados
git ls-files -o
git ls-files --others
para más información
https://git-scm.com/docs/git-ls-files
Status
Sirve para verificar el estado de git y de los archivos, si existe algo que cambió.
git status
para una salida más corta y la rama en la que está.
git status -bs
para más información
https://git-scm.com/docs/git-status
Comando Commit
Para hacer un commit, es decir crear un punto de versionado para el archivo. Un commit consolida un punto de restauración en el repositorio local. Todo commit está acompañado de un mensaje.
Como buena práctica, siempre haga mensajes para que encuentre más fácilmente a la hora de hacer un rollback
# agrega todos los archivos
git commit -m "mensaje" todos los archivos
# también agregando todos los archivos
git commit -m "mensaje" * todos los archivos
# commit solamente con un archivo especificado
git commit -m "mensaje" archivo1 archivo2 archivo3
En algunos casos necesitas cambiar algo cuando todo ya fue commiteado y para no generar más un commit necesitas agregar algo. Para no generar muchos, utiliza el comando amend, pues este agregará los cambios en el mismo commit.
git commit --amend
Para más información
https://git-scm.com/docs/git-commit
Entendiendo nuevamente el sistema de estados de un archivo antes de ir a un repositorio en algún servidor.
Un commit sube lo que está en Stage al Head, pero localmente.
Un atajo rápido para agregar todos los archivos y commitear al mismo tiempo, pero solo funciona con archivos que ya son rastreados por git.
git commit -a -m "mensaje"
NO ES POSIBLE DESHACER UN COMMIT EN EL REPOSITORIO REMOTO, HAY QUE HACER UN COMMIT POR ENCIMA DE CORRECCIÓN.
Comando Diff
Con este comando podemos verificar las alteraciones realizadas en los archivos del directorio de trabajo (copia local) en comparación con los archivos que ya fueron consolidados (commiteados). Recordando que es necesario que el archivo haya sido commiteado al menos una vez.
Para archivos que aún no pasaron al área de staged.
# Para todos los archivos
git diff
# Para especificar qué archivos quieres ver
git diff arq1
git diff arq1 arq2
Si un archivo ya fue agregado al área de staged con el comando add, por ejemplo es necesario utilizar.
# muestra la diferencia de lo que hay en el último commit con lo que hay en el área de staged
git diff --staged
# Para especificar un archivo o más
git diff --staged arq1
En caso de que quieras ver la diferencia solamente de algunos archivos.
git diff --staged arq1 arq2
# para archivos del área de trabajo
git diff arq1
Para ver los estados en cached usa --cached
Por defecto git funciona comparando con el último commit en el caso el HEAD.
git diff HEAD es lo mismo que git diff, por lo tanto es posible pasar exactamente el commit con el cual quieres comparar tu archivo si reemplazas el HEAD por el hash del commit.
Para entender un poco mejor hasta ahora cómo funciona esto.

Para más información.
https://git-scm.com/docs/git-diff
Comando Log
Para ver el historial de commits, usamos el log. Cuando tu proyecto se está actualizando con el del repositorio trae el log de todos en todas las ramas.
# Para todos los commits
git log
# Para los 3 últimos commits
git log -3
# Para mostrar resumido
git log --oneline
# Para filtrar por autor
git log --author="Fulano Tal"
# Para mostrar las ramas de forma gráfica con sus respectivos commits
git log --graph --decorate
# Para mostrar solamente los commits de una rama
git log origin/nombredelarama --oneline muestra los commits de la rama
El hash del commit es lo que necesitas para revertir un commit. En el comando log muestra dónde está tu Head y los hashes de los commits.
Para más información.
https://git-scm.com/docs/git-log
Comando Checkout
Usado para ir a un punto específico de un proyecto, sea commit, ramas y tags.
Para volver a algún punto de commit se usa checkout y el hash del commit.
El checkout también es usado para cambiar de rama como veremos posteriormente.
# Solo los 5 o 6 primeros caracteres del hash son suficientes
git checkout mihash
# Volviendo al último commit de una rama
git checkout nombredelarama
Si estás cambiando de rama y los archivos de aquella rama no están commiteados, en teoría se perderían y git no te deja hacer esto. Necesitas commitear para guardar o dar un reset --hard como se muestra abajo.
Aún así es posible usar el stash para guardar lo que hiciste en una pila como se verá más adelante.
## Para ir a la versión del archivo que esté en el último commit de la rama en la que estás.
git checkout nombredelarchivo
## el comando switch también cambia de rama, da lo mismo
## git switch nombredelarama
git checkout nombredelarama
# Crea una rama ya pasando a ella
git checkout -b nombredelarama
Para más información.
https://git-scm.com/docs/git-checkout
Reset x Clean
El comando reset sirve para redefinir el HEAD a un estado especificado.
git reset --hard es como si dieras un checkout en todos los archivos y de hecho vuelve al estado inicial de aquel punto de partida, o commit.
git reset --hard HEAD~n deshacer los commits siendo n el número de commits que quieres deshacer.
Un detalle interesante es que si creas un archivo en el working dir y nunca fue al área de Staged, es decir, git nunca rastreó este archivo, aunque vuelvas commit o incluso des un checkout al Head de aquella rama continuará en el proyecto.
Para eliminar de hecho un archivo no rastreado haz.
git clean -f
Para más información.
https://git-scm.com/docs/git-reset
https://git-scm.com/docs/git-clean
Comando Branch
Usado para manipular las ramificaciones localmente.
Entendiendo cómo funciona una rama.
La rama es una ramificación para que el proyecto siga por N caminos a partir de un punto. Si tienes una versión estable, es decir, la rama main, puedes desarrollar varias versiones del proyecto sin impactar en tu versión estable. La rama es una ramificación a nivel de proyecto, no confundir con un fork.
Una buena práctica es dejar de llamar a la rama principal master y llamarla main.
# lista las ramas locales
git branch
# crea una nueva rama localmente
git branch nuevarama
# elimina una rama localmente. No puedes estar en la misma rama que deseas eliminar
git branch -d nombredelarama
# para forzar la eliminación de la rama
git branch -D nombredelarama
# renombrar la rama en la que estás
git branch -m nuevonombre
# renombra otra rama
git branch -m nombredelarama nuevonombre
Para más información
https://git-scm.com/docs/git-branch/pt_BR
Comando Push
Usado para dar comando directo en el repositorio remoto al cual tu proyecto está vinculado (origin). Todo lo que va al repositorio lleva esa palabra. El push sube los archivos locales de la rama en la que estás a la respectiva rama en el servidor Github, GitLab, Bitbucket, etc.
Es posible que tengas más de un origin en el proyecto. Un ejemplo sería tener el mismo repositorio en 2 servidores diferentes. Pero esto no es común.
git push (intentará subir la rama a la principal, master/main si has definido como se hizo en la muestra del comando config. En ese caso, si estás en una rama diferente dará error. No es una buena práctica hacer este comando sin apuntar a la rama que deseas para evitar publicar en la master/main).
#Si no existe la rama la creará y subirá la rama al origin.
git push origin mirama
# si necesitas pasar algún origin diferentes
git push -u origin mirama
# lo mismo que el comando anterior
git push --set-upstream origin mirama
# Eliminará del servidor remoto apuntado en origin la rama especificada
git push --delete origin nombredelarama
Si vas a eliminar una rama en el repositorio debe estar alineado con todo el equipo antes para evitar que otras personas que están usando esa rama no la encuentren, generando problemas.
Curiosidad: git no hace push de un directorio vacío sin ningún archivo.
Para más información.
https://git-scm.com/docs/git-push
Comando Fetch
Es cuando solicitas al servidor que traiga las modificaciones del repositorio a la máquina local, pero no las aplica.
git fetch
Para más información.
https://git-scm.com/docs/git-fetch
Comando Pull
El comando pull es la suma del comando fetch con el comando merge. Él trae los cambios del servidor y ya hace el merge localmente.
El git pull actualiza todo el contenido del servidor con el de tu máquina, para la rama en la que estás
Si das un git pull y existe alguna rama diferente de las tuyas locales, ella no aparece en el comando git branch en el listado aunque exista. Solo aparece si das un checkout a ella manualmente.
Si creaste una rama localmente y no existe en el servidor e intentas dar un git pull, ocurrirá un error hasta que crees la misma rama igual en el servidor.
Usado para observar cómo está el proyecto adelante sin salir del punto en el que estás.
Es ideal siempre pasar el origin.
git pull origin nombredelarama
un parámetro que debe ser comentado es el --rebase. Este parámetro es un merge de lo que hay en aquella rama del repositorio con tu rama local.
git pull origin nombredelarama --rebase
Para más información.
https://git-scm.com/docs/git-pull
Comando Merge
El merge es cuando mezclas/juntas las alteraciones de una rama con otra.
Ve a la rama que recibirá las alteraciones y el comando de merge trayendo de aquella que deseas mergear.
Pero antes, ten certeza de que la rama en la que estás, de hecho esté en el último commit, pues es posible que cuando pases a esta ramificación alguien ya haya hecho alteración en ella. Para esto ejecuta.
git checkout rama_que_sera_mezclada
git pull origin rama_que_sera_mezclada
git merge hará el merge con la rama de mismo nombre que la tuya, si existe.
Si estás en main y quieres mergear con develop.
git merge develop
git merge develop Si estás en la rama main por ejemplo traerá las alteraciones de develop a main
El git merge hace las alteraciones y ya hace un commit si no hay conflictos, pues crea un punto de restauración.
Para más información.
https://git-scm.com/docs/git-merge
Comando Remote
Cuando abres un proyecto local y das un git init en ese proyecto para que git comience a versionar esto localmente, no podrás dar un git push si no sabe cuál es la dirección del repositorio con el cual está vinculado. El remote sirve para vincular un proyecto local a un repositorio en un servidor remoto.
# agrega el origin para la url
git remote add origin urlDelRepositorio.git
# muestra la url del push y del fetch
git remote -v
# trae los cambios del repositorio, prácticamente un fetch
git remote update
Para más información.
https://git-scm.com/docs/git-remote
Comando Tags
Imagina una tag como siendo un snapshot del proyecto en aquel momento. Diferente de las ramas son inmutables. Si das un checkout en una tag y haces commits nada cambiará a no ser que crees una rama primero a partir de aquel punto e inicies una nueva ramificación. En los repositorios son los releases del proyecto.
# lista las tags
git tag
# crea una tag y el mensaje a partir de donde estás
git tag -a nombredelatag -m "mensaje para explicar esta tag"
# crea una tag a partir del commit
git tag -a nombredelatag hashDelCommit -m "mensaje de explicación"
# envía la tag al repositorio remoto
git push origin nombredelatag
# elimina la tag localmente
git tag -d nombredelatag
# elimina la tag del repositorio remoto
git push --delete origin nombredelatag
Para más información.
https://git-scm.com/docs/git-tag
Comando Stash
Si hiciste alguna modificación, pero aún no estás listo para commitear pues aún existe algún tipo de error o aún no terminaste lo que estás haciendo, o incluso necesitas cambiar de rama para ayudar a un amigo, para cambiar de rama o es preciso commitear o revertir. Si commiteas con error no es buena práctica, si reviertes perderás todo el trabajo. El Stash guarda en memoria lo que estás haciendo para dejar para que puedas cambiar de rama. Funciona como una pila.
# guarda el cambio
git stash save "Mensaje de recordatorio"
# guarda sin mensaje
git stash
# muestra la pila de stashes
git stash list
# trae la cima de la pila pero no elimina
git stash apply trae la cima de la pila
# va al stash especificado pero no elimina
git stash apply stash@{n}
Dentro del comando stash tenemos el pop que hace lo mismo que el apply, pero ya elimina.
# va a la cima de la pila y elimina
git stash pop
# va al stash especificado y elimina
git stash pop stash@{n} pasa ya eliminando
Y también tenemos el subcomando drop que elimina y no toma las modificaciones.
# remueve exactamente qué stash quieres remover
git stash drop stash@{n}
Para más información.