Chuleta de Git
Encuentra el comando de Git adecuado según lo que quieras hacer, cópialo con un clic y deja que el asistente de soluciones escriba los pasos exactos para rescates habituales como deshacer un commit, renombrar una rama o combinar commits.
Última actualización:
Tus comandos
Cómo usar Chuleta de Git
- Busca o explora: escribe lo que quieres hacer (undo, rename, stash, tag) o elige una pestaña de categoría.
- Copia un comando con el botón Copiar y sustituye los marcadores resaltados, como <branch>, por tus propios valores.
- Usa el asistente de soluciones cuando estés en una situación concreta: elígela en la lista, responde a las preguntas y rellena tus nombres.
- Sigue los pasos generados en orden. Cópialos de uno en uno o todos a la vez, y lee cualquier advertencia antes de ejecutar un comando marcado como peligroso.
- Descarga la chuleta como archivo Markdown para tenerla junto a tu proyecto.
git reset vs git revert vs git restore
Estos tres comandos "deshacen" algo, por eso es fácil confundirlos. La pregunta clave es si el commit ya se ha compartido.
| Comando | Qué cambia | ¿Reescribe el historial? | Úsalo cuando |
|---|---|---|---|
git restore <file> | Los archivos de trabajo (o el área de preparación con --staged) | No | Quieres descartar o quitar de la preparación cambios que aún no tienen commit |
git reset --soft HEAD~1 | Mueve la rama hacia atrás; los cambios siguen preparados | Sí | El último commit es local y quieres rehacerlo |
git reset HEAD~1 (mixto) | Mueve la rama hacia atrás; los cambios siguen en tus archivos, sin preparar | Sí | Quieres dividir o volver a preparar el trabajo de un commit local |
git reset --hard HEAD~1 | Mueve la rama hacia atrás y borra los cambios | Sí | Quieres eliminar el commit y su trabajo (solo recuperable mediante reflog) |
git revert <commit> | Añade un commit nuevo con los cambios opuestos | No | El commit ya está subido a una rama que usan otras personas |
Cómo mueve Git tus cambios
Git guarda tu trabajo en cuatro lugares. La mayoría de los comandos mueven cambios de un lugar al siguiente:
- Directorio de trabajo: los archivos que editas.
git restoredescarta los cambios aquí. - Área de preparación (índice): lo que irá en el próximo commit.
git addmete cambios ygit restore --stagedlos saca. - Repositorio local: tus commits.
git commitregistra la instantánea preparada;git resetmueve hacia atrás el puntero de la rama. - Repositorio remoto: la copia compartida, como GitHub o GitLab.
git pushsube commits,git fetchlos descarga ygit pulllos descarga y fusiona.
Cómo leer las referencias HEAD~ y HEAD^
| Referencia | Significa |
|---|---|
HEAD | El commit que tienes actualmente en checkout |
HEAD~1 or HEAD~ | El padre de HEAD (un commit atrás) |
HEAD~3 | Tres commits atrás, siguiendo los primeros padres |
HEAD^2 | El segundo padre de un commit de fusión (la rama que se fusionó) |
main..feature | Commits en feature que no están en main |
origin/main | Tu última copia descargada de main en el remoto llamado origin |
@{u} | La rama upstream de la rama actual |
stash@{0} | La entrada de stash más reciente |
Una regla breve que evita la mayoría de los desastres con Git: reescribe el historial (reset, commit --amend, rebase) solo en commits que no existan en ningún sitio salvo tu ordenador o tu propia rama, y usa git revert para todo lo que otros puedan haber descargado ya.
Preguntas frecuentes
¿Cómo deshago el último commit en Git?
Si no lo has subido, ejecuta git reset --soft HEAD~1 para quitar el commit pero conservar sus cambios preparados, o git reset HEAD~1 para conservarlos sin preparar. Si el commit ya está subido a una rama compartida, ejecuta en su lugar git revert HEAD, que añade un commit nuevo que deshace los cambios sin reescribir el historial.
¿Qué diferencia hay entre git reset y git revert?
git reset mueve hacia atrás el puntero de la rama y quita commits del historial de la rama, así que solo debe usarse con commits que nadie más tenga. git revert crea un commit nuevo que aplica los cambios opuestos, así que el historial se conserva y es seguro en ramas ya subidas.
¿Cómo renombro una rama de Git en local y en el remoto?
Renómbrala en local con git branch -m old-name new-name, sube el nuevo nombre con git push origin -u new-name y luego borra la rama remota antigua con git push origin --delete old-name. Tus compañeros deberían ejecutar después git fetch --prune y cambiar a la nueva rama.
¿Qué diferencia hay entre git fetch y git pull?
git fetch descarga los commits y ramas nuevos del remoto, pero no cambia tus archivos de trabajo. git pull ejecuta un fetch y luego fusiona (o hace rebase, con --rebase) la rama remota en tu rama actual.
¿Es peligroso git push --force?
Sobrescribe la rama remota con la tuya local, lo que puede borrar commits que otras personas subieron. Es mejor usar git push --force-with-lease, que se niega a sobrescribir el remoto si tiene commits que no has descargado, y nunca forzar un push a una rama main compartida.
¿Uso git switch o git checkout?
Ambos funcionan. git switch (para ramas) y git restore (para archivos) se añadieron en Git 2.23 para repartir las muchas funciones de git checkout en comandos más claros. git checkout sigue funcionando en todas las versiones, por eso lo usan los tutoriales y scripts más antiguos.
¿Puedo recuperar una rama o un commit que borré?
Normalmente sí. Ejecuta git reflog para ver a dónde ha apuntado HEAD recientemente, busca el hash del commit de antes del borrado y ejecuta git branch recovered-name <hash>. Las entradas del reflog se conservan 90 días por defecto, así que actúa antes de que la recolección de basura las elimine.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.