MaisTools
Guías/

Chuleta de Git

Referencia rápida de Git: comandos, flags, ejemplos y variaciones organizados por sección con búsqueda instantánea.

Chuleta de Git

Comandos, flags, ejemplos y errores comunes

Configuración

git config

Lee o define opciones de configuración de Git en tres niveles: sistema, usuario (global) o repositorio (local).

Palabras claveconfigurardefinir opcionesuser.nameuser.emailidentidadconfiguración globalconfiguración localalias
Flags--global--local--system--list--unset--edit
Ejemplo
git config --global user.name "John Doe"
git config --global user.email "john.doe@example.com"
git config credential.helper

Define cómo Git memoriza las credenciales HTTPS para no pedir contraseña en cada push.

Palabras claveguardar contraseñarecordar credencialesautenticaciónloginno pedir contraseñacredential helper
Ejemplo
git config --global credential.helper manager
git config --global core.excludesfile

Define un .gitignore global aplicado a todos los repositorios.

Palabras clavegitignore globalignorar globalmenteexcludesfileignorar todos los repos
Ejemplo
git config --global core.excludesfile ~/.gitignore_global

Repositorios

git init

Crea un repositorio Git nuevo en el directorio actual.

Palabras clavecrear repositorionuevo repoinicializarempezar proyectoinitrepo vacíobare
Flags--bare--initial-branch=--shared
Ejemplo
git init
git init --initial-branch=main meu-projeto
git clone

Copia un repositorio remoto a la máquina local con todo el historial.

Palabras claveclonarcopiar repositoriodescargar proyectobajardownloadshallowdepth
Flags--depth--branch--single-branch--recurse-submodules--mirror--bare
Ejemplo
git clone https://github.com/user/repo.git

Stage y commit

git status

Muestra el estado del working directory y del staging: qué está modificado, en stage o sin trackear.

Palabras claveestadover cambiosver modificacionesqué he cambiadountrackedmodifiedstaged
Flags-s-b--ignored-uno
Ejemplo
git status
git add

Mueve cambios del working directory al staging area, listos para el próximo commit.

Palabras claveañadirstagingpreparar commitmarcar para commitindexaradd patchadd interactivo
Flags-A-p-i-u-n-f
Ejemplo
git add src/components/Button.tsx
git add .
git commit

Graba el contenido del staging en un commit nuevo del repositorio local con un mensaje.

Palabras clavecommitgrabarguardar cambiosmensajeregistraramendfixupsquashfirmar
Flags-m-a--amend--no-edit-S--allow-empty--no-verify--fixup--squash
Ejemplo
git commit -m "feat: adiciona git cheat sheet"
git restore

Restaura archivos: los saca del staging o descarta cambios en el working directory.

Palabras claverestaurardeshacer cambiossacar del stagingunstagerecuperar archivoundo file
Flags--staged--source=--worktree
Ejemplo
git restore --staged file.txt
git restore file.txt
git rm

Elimina archivos del repositorio (y opcionalmente del disco).

Palabras claveeliminarborrar archivoremoveruntrackrm cached
Flags--cached-r-f-n
Ejemplo
git rm secret.env
git mv

Renombra o mueve un archivo trackeado, equivalente a mv + git add + git rm.

Palabras clavemoverrenombrarrenamemove
Flags-f-n
Ejemplo
git mv old.tsx new.tsx

Branches

git branch

Lista, crea, renombra o elimina branches.

Palabras clavebranchramalistar branchescrear brancheliminar branchrenombrar branchmerged
Flags-a-r-vv-d-D-m-M--merged--no-merged--contains
Ejemplo
git branch
git branch feature/login
git checkout

Comando antiguo para cambiar de branch o restaurar archivos. Hoy se recomienda git switch y git restore.

Palabras clavecambiar branchcambiar de ramarecuperar archivocheckoutdetached HEADorphan
Flags-b-B--orphan--detach
Ejemplo
git checkout main
git checkout -b feature/x
git switch

Versión moderna de checkout dedicada a cambiar de branch.

Palabras clavecambiar de branchcambiar ramaswitchcrear y cambiar
Flags-c-C--detach--discard-changes
Ejemplo
git switch main
git switch -c feature/login

Merge y rebase

git merge

Une los cambios de otra branch en la actual, creando un commit de merge si es necesario.

Palabras clavejuntarintegrarmergearmergeconflicto mergefast-forwardno-ffsquash merge
Flags--no-ff--ff-only--squash--abort--continue-X-s
Ejemplo
git switch main
git merge feature/login
git rebase

Reaplica los commits de la branch actual sobre otra base, reescribiendo el historial.

Palabras claverebasereescribir historiallinealizarhistoryinteractive rebaseautosquashautostash
Flags-i--onto--continue--abort--skip--autosquash--autostash
Ejemplo
git switch feature
git rebase main
git cherry-pick

Aplica un commit específico de otra branch en la actual.

Palabras clavecherry-pickescoger commitcopiar commitaplicar commit en otra branch
Flags-x-n--continue--abort
Ejemplo
git cherry-pick a1b2c3d
git mergetool

Abre una herramienta gráfica para resolver conflictos de merge.

Palabras claveresolver conflictosherramienta mergeconflict toolmergetoolmeldvimdiff
Flags--tool=-y
Ejemplo
git mergetool --tool=meld

Remote

git remote

Gestiona los remotos del repositorio (origin, upstream, etc).

Palabras claveoriginupstreamremotoañadir remotecambiar URLset-urlprune remote
Subcomandosaddremoverenameset-urlshowprune
Flags-v
Ejemplo
git remote -v
git fetch

Descarga commits y refs del remoto sin integrarlos en la branch local.

Palabras clavedescargarfetchtraer del remotosin mergeprune branches remotas
Flags--all--prune--tags--depth--unshallow
Ejemplo
git fetch origin
git pull

Equivale a git fetch seguido de git merge (o rebase) en la branch actual.

Palabras clavepullactualizar branchsincronizar con remotopull rebaseff-only
Flags--rebase--ff-only--no-rebase--autostash
Ejemplo
git pull origin main
git push

Envía commits locales al remoto.

Palabras clavepushenviarpublicarsubir al remotoforce pushforce-with-leasepush tagseliminar branch remota
Flags-u--force--force-with-lease--tags--delete--dry-run--all
Ejemplo
git push -u origin feature/login

Stash

git stash

Guarda cambios sin commitear en una pila temporal para limpiar el working directory.

Palabras clavestashguardar temporalocultar cambiosdejar de ladowork in progresswipuntracked stash
Subcomandospush
Flags-u-a-m-k-p
Ejemplo
git stash push -m "WIP login"
git stash list / show / pop / apply / drop / clear

Manipulación de la pila de stashes.

Palabras claverecuperar stashlistar stashesaplicar stashpopdropclearbranch a partir de stash
Ejemplo
git stash list
git stash pop

Tags

git tag

Crea, lista, elimina o verifica tags. Las tags marcan puntos del historial (releases).

Palabras clavetagmarcar versiónreleaseetiquetaversiónanotadafirmadapush tags
Flags-a-m-s-d-l-f
Ejemplo
git tag -a v1.2.0 -m "Release 1.2"
git describe

Devuelve un nombre legible basado en la tag más cercana.

Palabras clavedescribeversión actualúltimo tagdirtyabbrev
Flags--tags--always--dirty--abbrev
Ejemplo
git describe --tags --always --dirty

Log

git log

Muestra el historial de commits con filtros y formato flexibles.

Palabras clavehistorialver commitslista commitshistorygráficologonelinefiltrar por autorbuscar mensajepickaxe
Flags--oneline--graph--all--decorate-p--stat--since--author--grep-S
Ejemplo
git log --oneline --graph --decorate --all
git show

Muestra el contenido de un commit, tag u objeto.

Palabras clavever commitmostrar commitcontenidocambios de un commitshow
Flags--stat--name-only--name-status
Ejemplo
git show HEAD
git show a1b2c3d:src/file.tsx
git diff

Muestra diferencias entre working dir, staging, commits o branches.

Palabras clavediffdiferenciascompararver cambioscomparar branchesstaged diffword diff
Flags--cached--staged--stat--name-only--word-diff
Ejemplo
git diff
git diff --cached
git diff main feature
git blame

Muestra quién modificó cada línea de un archivo y en qué commit.

Palabras claveblamequién cambióautor de la líneaculpaanotar líneas
Flags-L-w-C-M
Ejemplo
git blame -L 10,30 file.tsx
git shortlog

Resumen agrupado por autor (útil para release notes).

Palabras claveshortlogcontributorsautoresconteo por autorrelease notes
Flags-s-n-e
Ejemplo
git shortlog -sne
git reflog

Historial local de todo lo que HEAD tocó. Salvavidas para recuperar commits perdidos.

Palabras clavereflogrecuperar commit perdidoundo resetsalvavidashistory HEADrestaurar trabajo
Subcomandosshowexpiredelete
Ejemplo
git reflog
git reset --hard HEAD@{2}

Deshacer

git reset

Mueve HEAD a otro commit, opcionalmente alterando staging y working dir.

Palabras claveresetvolver atrásdeshacer commitsofthardmixedmover HEADdescartar
Flags--soft--mixed--hard--keep--merge
Ejemplo
git reset --soft HEAD~1
git reset --mixed HEAD~1
git reset --hard HEAD~1
git revert

Crea un commit nuevo que deshace los cambios de otro. Seguro en branches compartidas.

Palabras claverevertrevertir commitdeshacer con nuevo commitanular cambios
Flags--no-commit-m--continue--abort
Ejemplo
git revert a1b2c3d
git clean

Elimina archivos sin trackear del working directory. Operación destructiva.

Palabras clavecleanlimpiar untrackedeliminar archivos no trackedquitar basuradry-run
Flags-n-f-d-x-X-i
Ejemplo
git clean -nfd

Submódulos

git submodule add

Añade un repositorio como submódulo dentro del actual.

Palabras clavesubmódulosub-repositoriodependencia gitvendorañadir submodule
Flags-b--name
Ejemplo
git submodule add -b main https://github.com/user/lib.git vendor/lib
git submodule init / update

Inicializa y descarga submódulos definidos en .gitmodules.

Palabras claveinicializar submóduloactualizar submódulorecursivesubmodule update
Flags--init--recursive--remote--merge--rebase
Ejemplo
git submodule update --init --recursive
git submodule status / foreach / deinit

Ver estado, ejecutar comando en cada submódulo o desactivarlo.

Palabras claveestado submóduloforeachdesactivar submódulodeiniteliminar submodule
Flags--recursive
Ejemplo
git submodule foreach 'git pull origin main'

Hooks

Activar un hook manual

Crea un archivo ejecutable en .git/hooks/ con el nombre del evento (pre-commit, pre-push, commit-msg, post-merge, etc).

Palabras clavehookganchopre-commitpre-pushpost-mergecommit-msgautomatizarscript
Ejemplo
printf '#!/bin/sh\nnpm run lint\n' > .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
git config core.hooksPath

Define un directorio de hooks compartido (versionable, fuera de .git).

Palabras clavehooks compartidosversionar hookscore.hooksPathhooks fuera del .git
Ejemplo
git config core.hooksPath .githooks
Husky

Herramienta JS que versiona los hooks en package.json y los instala automáticamente.

Palabras clavehuskyhooks nodehooks npmlint-stagedinstalar hooks automáticamente
Ejemplo
npx husky init
echo "npm test" > .husky/pre-commit
git commit --no-verify

Salta los hooks pre-commit y commit-msg (usar con moderación).

Palabras clavesaltar hooksignorar hooksno-verifybypass pre-commit
Ejemplo
git commit --no-verify -m "hotfix"

Avanzado

git bisect

Búsqueda binaria en el historial para encontrar el commit que introdujo un bug.

Palabras clavebisectbúsqueda binariaencontrar bugencontrar regresiónfind regression
Subcomandosstartgoodbadskipresetrun
Ejemplo
git bisect start
git bisect bad HEAD
git bisect good v1.0
git bisect reset
git worktree

Crea múltiples working directories ligadas al mismo .git, permitiendo trabajar en varias branches en paralelo.

Palabras claveworktreemúltiples branchesworkspace paralelovarios árboleshotfix branch
Subcomandosaddlistremoveprune
Ejemplo
git worktree add ../proj-hotfix hotfix/urgente
git rebase -i

Reescribe el historial: combina, reordena, edita o elimina commits.

Palabras claverebase interactivosquashrewordedit commitfixupdrop commitreordenar
Subcomandospickrewordeditsquashfixupdropexec
Ejemplo
git rebase -i HEAD~5
# pick    a1b2 feat: x
# squash  c3d4 fix typo
# reword  e5f6 chore: y
# drop    g7h8 wip
git filter-repo

Reescribe el historial en masa, sustituto moderno de git filter-branch. Útil para eliminar archivos sensibles.

Palabras clavefilter-repoeliminar archivo del historialborrar secretoreescribir historialfilter-branch sustitutoBFG
Flags--path--invert-paths--replace-text
Ejemplo
git filter-repo --path secrets.env --invert-paths
git archive

Crea un tarball o zip del contenido de una ref, sin .git.

Palabras clavearchiveexportar zipexportar tarsnapshotrelease zipsin .git
Flags--format--prefix-o
Ejemplo
git archive --format=zip --prefix=app/ -o release.zip v1.0
git bundle

Empaqueta commits en un único archivo, transferible offline.

Palabras clavebundletransferir offlinerepo en un archivosin redtransferencia sneakernet
Subcomandoscreateverifyunbundle
Ejemplo
git bundle create repo.bundle --all
git clone repo.bundle nova-pasta
git rev-parse

Resuelve una referencia a un SHA completo, corto o nombre.

Palabras claverev-parseSHA actualbranch actualhash cortoabbrev-ref
Flags--short--abbrev-ref--verify
Ejemplo
git rev-parse HEAD
git rev-parse --abbrev-ref HEAD
git rev-parse --short HEAD
git cat-file

Inspecciona objetos de Git (blobs, trees, commits, tags).

Palabras clavecat-fileinspeccionar objetoblobtreever SHAdebug objetos
Flags-p-t-s
Ejemplo
git cat-file -p HEAD
git cat-file -t a1b2c3d
git ls-files / ls-tree

Lista archivos trackeados (ls-files) o el contenido de una tree (ls-tree).

Palabras clavelistar archivos trackedls-filesls-treelistar contenido de treearchivos indexados
Flags--cached--others--ignored
Ejemplo
git ls-files
git ls-tree -r HEAD --name-only
git gc / fsck

Mantenimiento: garbage collection, integridad, eliminación de objetos sueltos.

Palabras clavegarbage collectionmantenimientointegridadoptimizargcfsckprune objetos
Flags--aggressive--prune=now
Ejemplo
git gc --aggressive --prune=now
git fsck --full
git sparse-checkout

Permite tener solo un subconjunto del árbol localmente, útil para monorepos grandes.

Palabras clavesparsecheckout parcialmonoreposubsetver solo una carpetasparse-checkout cone
Subcomandosinitsetlistdisable
Ejemplo
git sparse-checkout init --cone
git sparse-checkout set apps/web libs/ui
git notes

Añade notas a commits sin alterar su SHA.

Palabras clavenotesanotacionesmetadata commitcomentario sin cambiar SHA
Subcomandosaddshoweditremove
Ejemplo
git notes add -m "reviewed by QA" HEAD

Referencia

Flujo de Git
┌──────────────┐  git add     ┌────────────┐  git commit  ┌─────────────┐  git push   ┌──────────┐
│ Working Dir  │ ───────────▶ │  Staging   │ ───────────▶ │ Local Repo  │ ──────────▶ │ Remote   │
│ (files)      │ ◀─────────── │  (index)   │ ◀─────────── │  (.git)     │ ◀────────── │ (origin) │
└──────────────┘  git restore └────────────┘  git reset   └─────────────┘  git fetch  └──────────┘
                                                                git pull = git fetch + git merge
  • untrackedarchivo nuevo, Git aún no lo conoce
  • modifiedarchivo conocido fue modificado
  • stagedmarcado para el próximo commit
  • committedguardado en .git, parte de la historia
  • ignoredincluido en .gitignore
Merge vs Rebase vs Squash
Merge

Branches compartidas, integrar features grandes preservando contexto, branches de release.

Ventajas
  • No reescribe el historial
  • Seguro en cualquier escenario
  • Preserva la timeline real
Desventajas
  • Historial con diamantes y ruido
  • git log más difícil de leer
Rebase

Actualizar feature branch local con main antes del PR. Mantener historial lineal.

Ventajas
  • Historial lineal y limpio
  • git log legible
  • git bisect más eficaz
Desventajas
  • Reescribe SHAs (NUNCA en branches públicas)
  • Los conflictos pueden ser repetitivos
  • Pierde contexto temporal
Squash

Antes de mergear una feature con varios commits 'wip' o 'fix typo' en main.

Ventajas
  • 1 commit limpio por feature
  • main con historial ultra-legible
Desventajas
  • Pierde granularidad del desarrollo
  • git bisect solo localiza la feature entera

Regla de oro: rebase localmente, merge públicamente. Nunca hacer rebase en branches que otros usan.

Reset: soft, mixed, hard
--softMantiene staging y working dir

Mueve HEAD. Mantiene staging y working dir intactos. Los archivos quedan en staging.

Reagrupar commits sin perder cambios.

--mixedLimpia staging, mantiene working dir

(default) Mueve HEAD. Limpia staging pero mantiene working dir. Los archivos quedan unstaged.

Rehacer lo que iba al próximo commit.

--hardBorra todo (destructivo)

Mueve HEAD. Limpia staging Y working dir. Borra cambios sin commitear. Destructivo.

Volver al estado de otro commit, abandonándolo todo.

Errores comunes y soluciones
fatal: refusing to merge unrelated histories
Causa

Los dos repos no comparten un commit ancestro común.

Solución

git pull origin main --allow-unrelated-histories

Updates were rejected because the remote contains work that you do not have
Causa

El remoto tiene commits que el local desconoce.

Solución

git pull --rebase origin main y luego git push. Nunca hagas push --force sin --force-with-lease.

Please commit your changes or stash them before you switch branches
Causa

Hay cambios locales que entrarían en conflicto al cambiar de branch.

Solución

git stash, git switch otra-branch y luego git stash pop.

CONFLICT (content): Merge conflict in <file>
Causa

El merge o rebase tocó las mismas líneas que otra branch.

Solución

Editar entre <<<<<<< ======= >>>>>>> y luego git add archivo seguido de git merge --continue. Para abortar: git merge --abort.

detached HEAD
Causa

Se hizo checkout de un SHA o tag en vez de una branch.

Solución

Para guardar el trabajo usa git switch -c nueva-branch. Para descartar usa git switch main.

Permission denied (publickey)
Causa

Clave SSH no configurada en GitHub o GitLab.

Solución

Ejecuta ssh-keygen -t ed25519 -C "email" y añade ~/.ssh/id_ed25519.pub a las claves SSH del servicio.

fatal: Authentication failed (HTTPS)
Causa

GitHub dejó de aceptar contraseña, hace falta un Personal Access Token.

Solución

Generar un PAT en GitHub y usarlo como contraseña, o cambiar el remote a SSH.

Your branch and 'origin/main' have diverged
Causa

Ambos lados tienen commits diferentes.

Solución

git pull --rebase en feature local, o git pull simple en main compartida.

error: failed to push some refs (non-fast-forward)
Causa

El remoto avanzó, no se puede empujar sin integrar primero.

Solución

git pull --rebase seguido de git push.

Borré la branch equivocada o hice reset --hard y perdí trabajo
Causa

Operación destructiva sin backup.

Solución

git reflog para encontrar el SHA, luego git checkout -b recuperada <sha>. Los commits permanecen ~30 días antes del gc.

.gitignore no funciona
Causa

El archivo ya estaba trackeado antes de ser ignorado.

Solución

git rm --cached <archivo> seguido de git commit -m "untrack". Para directorios: git rm -r --cached <carpeta>.

Hice commit de un secreto, contraseña o archivo .env
Causa

git add . sin cuidado.

Solución

Rotar el secreto, ejecutar git filter-repo --path .env --invert-paths, git push --force-with-lease y avisar al equipo para reclonar.

LF will be replaced by CRLF
Causa

Diferencias de fin de línea entre Windows y Unix.

Solución

git config --global core.autocrlf true en Windows, o input en Mac y Linux.

Filename too long (Windows)
Causa

Límite de 260 caracteres de Windows.

Solución

git config --system core.longpaths true