Notas Git

Comandos de Git para revisar cambios, trabajar con ramas y recuperar trabajo.

Revisar el repositorio

Estado y diferencias

status muestra la rama y los cambios. diff compara el directorio de trabajo con el área de preparación. Con --staged ves lo que entrará en el próximo commit.

git status -sb
git diff
git diff --staged
git diff HEAD -- README.md
git diff --check

Historial y cambios por archivo

Usa show para inspeccionar un commit. log --follow sigue el historial de un archivo a través de cambios de nombre.

git log --oneline --graph --decorate --all
git log -p -2
git show --stat HEAD
git show --name-only HEAD
git log --follow -- README.md
git blame -- README.md

Preparar y guardar cambios

Preparar por archivo o por bloque

add -p permite elegir bloques de cambios. restore --staged retira un archivo del próximo commit y conserva tus cambios locales.

git add -- README.md
git add -p
git diff --staged
git commit -m "Update documentation"
git restore --staged -- README.md

Ajustar el último commit local

Usa amend con un commit que aún no hayas compartido. Incluye los cambios preparados y crea un nuevo identificador de commit.

git commit --amend
git commit --amend --no-edit

Archivos ignorados y seguidos

check-ignore indica qué regla ignora una ruta. rm --cached deja el archivo en disco y prepara su retirada del repositorio. Añade la regla correspondiente a .gitignore para evitar que se vuelva a incorporar.

git check-ignore -v -- dist/index.html
git rm --cached -- local-settings.json

Ramas e integración

Crear y cambiar de rama

switch -c crea una rama desde el commit actual. switch - vuelve a la rama anterior. branch -d protege las ramas que aún tienen cambios sin integrar.

git branch -vv
git switch -c feature/docs
git switch main
git switch -
git branch --merged main
git branch -d feature/docs

Integrar cambios y resolver conflictos

Desde tu rama de trabajo, puedes integrar origin/main. Si hay conflictos, edita los archivos, prepáralos y continúa la fusión. Usa --abort si decides cancelarla.

git fetch origin
git merge origin/main
git status
git add -- README.md
git merge --continue
git merge --abort

Aplicar un commit concreto

cherry-pick aplica el cambio de un commit en la rama actual. Sustituye abc1234 por su identificador.

git show abc1234
git cherry-pick abc1234

Repositorios remotos

Clonar y sincronizar

Sustituye la URL de ejemplo por la de tu repositorio. fetch --prune actualiza las referencias remotas y limpia las obsoletas. pull --ff-only solo integra si la rama puede avanzar sin crear una fusión.

git clone https://example.com/team/project.git
git remote -v
git fetch --prune origin
git pull --ff-only

Publicar una rama

-u vincula la rama local con la remota. Después puedes usar git push desde esa rama.

git push -u origin feature/docs

Guardar temporalmente y recuperar

Aparcar trabajo en curso

push -u guarda también archivos sin seguimiento. apply recupera los cambios y conserva la entrada. Elimínala con drop una vez comprobado el resultado.

git stash push -u -m "Work in progress"
git stash list
git stash show -p 'stash@{0}'
git stash apply 'stash@{0}'
git stash drop 'stash@{0}'

Deshacer un commit compartido

revert crea un commit que invierte el cambio anterior. Revisa el commit que vas a revertir antes de ejecutarlo.

git show abc1234
git revert abc1234

Recuperar un commit local

reflog registra movimientos recientes de referencias locales. Cuando encuentres el commit, crea una rama desde su identificador para conservarlo.

git reflog --date=relative
git branch rescue abc1234

Buscar y diagnosticar

Buscar en archivos y commits

git grep busca en archivos seguidos. log -S encuentra commits que cambian el número de apariciones de una cadena.

git grep -n 'example'
git log -S 'example' --oneline
git log origin/main..HEAD --oneline

Encontrar el commit que introdujo un fallo

Marca HEAD como defectuoso y abc1234 como un commit que sabes que funcionaba. Prueba cada revisión y márcala con git bisect good o git bisect bad según el resultado. Al terminar, restablece la rama inicial.

git bisect start
git bisect bad HEAD
git bisect good abc1234

Ejecuta este comando al terminar la búsqueda.

git bisect reset

Rebase, etiquetas y árboles de trabajo

Actualizar una rama local con rebase

En una rama que aún no has compartido, rebase vuelve a aplicar tus commits sobre origin/main. Si hay un conflicto, resuélvelo e indexa los archivos antes de continuar. Puedes cancelar con --abort.

git fetch origin
git rebase origin/main
git rebase --continue
git rebase --abort

Etiquetar una versión

Una etiqueta anotada guarda un mensaje y apunta a un commit. Publica la etiqueta por nombre para enviar solo esa versión.

git tag -a v1.0.0 -m "Release 1.0.0"
git show v1.0.0
git push origin v1.0.0

Trabajar en dos ramas a la vez

worktree add abre otra rama en un directorio vecino. Así puedes cambiar de tarea sin mover el trabajo que tienes abierto.

git worktree add -b feature/review ../project-review main
git worktree list
git worktree remove ../project-review