Chuleta de Git por tarea: comandos, recetas para deshacer y npm | We.Inc
Una chuleta de Git con buscador, agrupada por tarea: iniciar, guardar, ramas, merge, sincronizar y desplegar, además de recetas de "la he liado" para deshacer, un diagrama de dónde viven los cambios y comandos npm comunes.
Casi todo el trabajo diario con Git son seis comandos: git status para ver los cambios, git add para prepararlos, git commit -m para guardarlos, git switch -c para crear una rama, git pull para traer actualizaciones y git push para compartir. Para deshacer, usa git restore para archivos, git reset para commits locales y git revert para commits ya subidos.
Deshacer de un vistazo
Qué deshacer
Comando
Cambios en un archivo
git restore file
El staging
git restore --staged file
El último commit, sin subir
git reset --soft HEAD~1
Un commit ya subido
git revert <commit>
Busca entre los comandos de abajo, copia cualquier línea con un clic y usa las recetas cuando algo haya salido mal. Los comandos usan git switch y git restore, los sustitutos más claros de las muchas tareas de git checkout.
Escribe una palabra como deshacer, rama o tag en el buscador.
Copia el comando y pon el nombre de tu rama o archivo.
Mira el diagrama para ver entre qué zonas mueve los cambios un comando.
Ejecuta git status antes y después de cualquier cosa que reescriba el historial.
Haz commits pequeños y frecuentes; los commits pequeños son fáciles de revertir y revisar.
Nunca hagas reset ni force-push en una rama que usan otras personas. Usa revert.
Prefiere --force-with-lease a --force; se niega si otra persona ha subido algo.
Escribe los mensajes de commit como lo que hace el cambio: "Añade formulario de reservas", no "cambios".
Guarda los secretos en archivos de entorno incluidos en .gitignore desde el primer commit.
Preguntas frecuentes
¿Qué diferencia hay entre git reset y git revert?
reset mueve tu rama hacia atrás y quita commits de su historial; está bien para trabajo local. revert añade un commit nuevo que deshace uno antiguo y deja el historial intacto, que es la opción segura cuando un commit ya está subido.
¿git switch o git checkout?
Los dos funcionan. Git 2.23 añadió git switch para cambiar de rama y git restore para restaurar archivos, separando las dos tareas que antes hacía git checkout. Son más fáciles de leer y más difíciles de usar mal.
¿Qué hace git fetch que no haga git pull?
fetch descarga los commits nuevos pero no cambia nada en tu rama. pull ejecuta fetch y después hace merge o rebase de esos commits en tu rama actual.
¿Cómo recupero un commit que he perdido?
Ejecuta git reflog. Lista todas las posiciones en las que ha estado tu HEAD, incluidos commits a los que no apunta ninguna rama. Encuentra el que quieres y ejecuta git switch -c rescue <sha>.
¿npm install o npm ci?
Usa npm install mientras desarrollas; puede actualizar el lock file. Usa npm ci en builds y en CI; borra node_modules e instala exactamente lo que dice el lock file, y falla si package.json y el lock file no coinciden.
Dónde viven tus cambios
Git maneja cuatro lugares: tu carpeta de trabajo, el área de staging (también llamada índice), tu repositorio local y el remoto. add mueve los cambios de la carpeta al staging, commit del staging al repositorio, push de tu repositorio al remoto, y pull trae de vuelta los commits del remoto.
Del commit a un sitio web en producción
Muchos hostings despliegan cuando haces push a una rama. Trabaja en una rama de funcionalidad, súbela para obtener una vista previa y haz merge en main para publicar. Etiqueta las versiones para poder volver rápido a una versión que sabes que funciona.
Soluciones paso a paso
Hice commit en main en vez de en una rama
Crea una rama donde estás (conserva los commits) y luego devuelve main a la posición del remoto. Hazlo solo antes de subir nada.
Resolver un conflicto de merge
Git se detiene y marca las líneas en conflicto. Edita cada archivo hasta dejar la versión que quieres, quita los marcadores y después prepara los cambios y termina.
Subí un secreto por error
Rota primero la clave: una vez subida, da por hecho que se ha copiado. Después quítala del código y del historial y añade el archivo a .gitignore.
¿Escribiendo un README para el repositorio? Usa la
chuleta de Markdown
Carpeta de trabajo
Área de staging
Repositorio local
Remoto (GitHub, GitLab)
Configurar una vez
Nombre que aparece en tus commits
Email que aparece en tus commits
Los repositorios nuevos empiezan en main
git pull hace rebase en lugar de crear commits de merge
Empezar un proyecto
Convertir la carpeta actual en un repositorio
Copiar un repositorio remoto en tu máquina
Conectar un repositorio local con un remoto
Listar los remotos y sus URLs
Guardar el trabajo
Qué ha cambiado y qué está preparado
Preparar un archivo
Preparar partes de archivos, bloque a bloque
Hacer commit de lo preparado
Cambios aún sin preparar
Cambios preparados para el próximo commit
Historial compacto con las ramas dibujadas
Ramas y merge
Crear una rama y pasar a ella
Pasar a una rama existente
Listar las ramas locales
Hacer merge de esa rama en la actual
Reaplicar la rama actual encima de main
Borrar una rama ya fusionada (-D fuerza)
Copiar un commit en la rama actual
Sincronizar y desplegar
Descargar los cambios remotos sin tocar tus archivos
Hacer fetch y después merge o rebase en la rama actual
Subir una rama nueva y recordar adónde va
Subir la rama actual
Marcar una versión
Subir ese tag (los tags no se suben por defecto)
Aparcar trabajo para más tarde
Apartar los cambios sin commit
Ver qué hay guardado en el stash
Recuperar el último stash y quitarlo de la lista
La he liado: recetas
Descartar los cambios sin preparar de un archivo (no se puede deshacer)
Quitar un archivo del staging pero conservar los cambios
Corregir el mensaje del último commit (o añadirle archivos preparados) antes de subir
Deshacer el último commit y dejar sus cambios preparados
Borrar el último commit y sus cambios (local, sin subir)
Deshacer un commit subido con un commit nuevo; seguro en ramas compartidas
Encontrar un commit perdido tras un reset o rebase y luego git switch -c rescue <sha>
Salir de un merge con conflictos
Salir de un rebase que ha salido mal
Hice commit en main por error: pasar el trabajo a una rama y después hacer reset de main
Sobrescribir una rama remota solo si nadie ha subido nada desde tu último fetch
Previsualizar y luego borrar archivos y carpetas sin seguimiento
Crear package.json con valores por defecto
Instalación limpia exactamente desde el lock file (úsalo en CI)
Añadir una dependencia
Añadir una dependencia solo de desarrollo
Quitar una dependencia
Listar paquetes con versiones más nuevas
Informar de vulnerabilidades conocidas
Mostrar qué versiones de un paquete hay instaladas y por qué