Skip to content

Instantly share code, notes, and snippets.

@marioblas
Last active March 22, 2017 11:32
Show Gist options
  • Save marioblas/5c950cc6dcf382059447 to your computer and use it in GitHub Desktop.
Save marioblas/5c950cc6dcf382059447 to your computer and use it in GitHub Desktop.
🔀 Git cheat sheet
###############################################################################
# EMPEZANDO ###################################################################
###############################################################################
# Configurar email y nombre
git config --global user.name "John Doe"
git config --global user.email "[email protected]"
# Crear un nuevo repositorio
git init
# Clonar un repositorio remoto
git clone username@host:/path/to/repository
git clone https://github.com/<user>/<repository>
git clone [email protected]:<user>/<repository>.git
git clone <url>
###############################################################################
# STATUS, ADD & COMMIT ########################################################
###############################################################################
# Comprobar el estado de los archivos
git status
# Comprobar el estado de los archivos (formato corto)
git status -sb
# Seguimiento de nuevos archivos
git add <filename>
# Preparar archivos modificados
git add .
# Preparar archivos modificados y eliminados
git add -u .
# Confirmar los cambios
git commit -m "Commit message"
# Cerrar incidencias mediante mensajes de commit (Github, Bitbucket...).
# Usando una de las palabras clave fix/fixes/fixed, close/closes/closed o resolve/resolves/resolved
# Seguida del número de la incidencia
git commit -m "Commit message, <keyword> #<issue-number>"
# Commits vacíos
git commit -m "Commit message" --allow-empty
###############################################################################
# REPOSITORIOS REMOTOS ########################################################
###############################################################################
# Añadir un repositorio remoto a nuestro repositorio local (llamado "origin" por defecto)
git remote add origin <https/ssh/url>
# Ver los repositorios remotos
git remote -v
# Obtener mas detalles de un repositorio remoto
git remote show <name>
# Enviar cambios al repositorio remoto (llamado "origin" por defecto)
git push origin master
git push origin <branch>
# Enviar todas las ramas y etiquetas al repositorio remoto
git push --all origin
# Actualizar el repositorio local (ramas y commits...)
# No tiene ningún efecto en el trabajo de desarrollo local. Es una forma segura de revisar commits antes de integrarlos.
git fetch
# Actualizar el repositorio local eliminando las referencias a las ramas remotas que ya no existen
git fetch --prune
# Actualizar el repositorio local integrando los cambios (fetch + merge)
git pull
###############################################################################
# RAMAS #######################################################################
###############################################################################
# Mostrar las ramas locales
git branch
# Mostrar las ramas remotas
git branch -r
# Mostrar todas las ramas (locales y remotas)
git branch -a
# Mostrar el nombre de la rama actual
git rev-parse --abbrev-ref HEAD
# Crear una nueva rama (cambiándonos a ella)
git checkout -b <branch-name>
# Crear una nueva rama a partir de un commit (cambiándonos a ella)
git checkout -b <branch-name> <commit>
# Cambiarnos a una rama
git checkout <branch>
# Volver a la rama anterior
git checkout -
# Obtener una rama remota
git checkout -t origin/<branch>
# Renombrar una rama local
git branch -m <branch> <new-name>
# Renombrar la rama local actual
git branch -m <new-name>
# Borrar una rama local
git branch -d <branch>
# Borrar una rama remota
git push origin :<branch>
###############################################################################
# CHERRY PICK, MERGE & REBASE #################################################
###############################################################################
# Integrar un commit a nuestra rama activa
git cherry-pick <commit>
# Cancelar el cherry-pick y volver al estado anterior
git cherry-pick --abort
# Fusionar otra rama a nuestra rama activa
git merge <branch>
# Mostrar las ramas que están fusionadas con nuestra rama activa
git branch --merged
# Mostrar las ramas que no están fusionadas con nuestra rama activa
git branch --no-merged
# Actualizar la rama actual al estado de la rama o commit indicados
git rebase <branch/commit>
###############################################################################
# DIFF ########################################################################
###############################################################################
# Mostrar los cambios preparados para el commit
git diff --cached
# Mostrar las diferencias entre una rama local y una rama remota
# Ej.: git diff master..origin/master
git diff <local-branch>..<remote-branch>
###############################################################################
# STASH #######################################################################
###############################################################################
# Guardar en una pila provisional nuestros cambios (desde el ultimo commit) para recuperarlos luego
git stash
# Guardar nuestros cambios usando un mensaje personalizado (por defecto git utiliza el mensaje del commit actual)
git stash save "Custom stash message"
# Mostrar la lista de stashes.
# Cada item tiene la siguiente estructura (donde 'n' es el número del stash):
# stash@{n}: WIP on <branch>: <sha1> <commit-message>
git stash list
# Mostrar los cambios almacenados en el stash indicado
git stash show stash@{n}
# Aplicar los cambios del stash indicado
git stash apply stash@{n}
# Aplicar los cambios del stash indicado borrándolo de la pila en caso de no haber conflictos
git stash pop stash@{n}
# Borrar el stash inicado de la pila
git stash drop stash@{n}
# Borrar el último stash de la pila
git stash drop
# Borrar todos los stash de la pila
git stash clear
###############################################################################
# ETIQUETAS ###################################################################
###############################################################################
# Mostrar las etiquetas
git tag
# Crear una etiqueta ligera
git tag <tag-name>
# Crear una etiqueta anotada
git tag -a <tag-name> -m "Tag message"
# Etiquetar un commit mas tarde
git tag <tag-name> <commit>
# Enviar una etiqueta al repositorio remoto
git push origin <tag-name>
# Enviar todas las etiquetas al repositorio remoto
git push origin --tags
###############################################################################
# LOGS ########################################################################
###############################################################################
# Mostrar el historial de commits (ID, autor, fecha, mensaje)
git log
# Mostrar el historial de commits (formato corto)
git log --pretty=oneline
# Mostrar el historial de commits (formato corto y SHA corto)
git log --oneline
# Mostrar el historial de commits (ver los ficheros que han cambiado)
git log --name-status
# Mostrar el historial de commits (ver los ficheros que han cambiado con el número de lineas insertadas y borradas)
git log --stat
# Mostrar el historial de commits (ver los ficheros que han cambiado con sus modificaciones)
git log -p
# Mostrar el historial de commits (ver nombres de ramas o etiquetas)
git log --decorate
# Mostrar el historial de commits (ver estilizado en ASCII; ramas, etiquetas, autores...)
git log --all --graph --pretty=format:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
# Mostrar el número total de commits del repositorio (usando el comando `wc`)
git log --oneline --all | wc -l
# Buscar en el historial los commits de un autor determinado
git log --author=johndoe
# Buscar en el historial los commits que contienen algún término en el mensaje
git log --grep="Something in the commit message"
###############################################################################
# DESHACER/MODIFICAR COSAS ####################################################
###############################################################################
# Deshacer la modificación de uno o varios ficheros (sin commitear)
git checkout -- <file(s)>
# Deshacer la preparación de todos los ficheros
git reset HEAD
# Deshacer la preparación de uno o varios ficheros
git reset HEAD <file(s)>
# Deshacer un commit (generando un nuevo commit que deshace los cambios)
git revert <commit>
# Modificar el último commit (si nos olvidamos de añadir algún archivo o nos equivocamos en el mensaje...)
# Abrirá nuestro editor permitiendonos cambiar el mensaje del commit mas reciente
git commit --amend
# Modificar el último commit indicando el mensaje directamente.
git commit --amend -m "Commit message"
# Modificar el último commit reutilizando el mensaje del commit mas reciente
git commit --amend --reuse-message=HEAD
# Modificar un commit que ya hemos subido a una rama remota
# AVISO: sobreescribirá la rama remota con el estado de la rama local,
# si hay commits en la rama remota que no tenemos en la rama local se perderán.
# AVISO: cuidado con modificar commits que ya hemos compartido con otras personas, al modificar un commit cambia su SHA,
# lo que supone un problema si otra persona tiene una copia del commit antiguo...
git push -f <remote> <branch>
# Volver a un commit anterior
git checkout <commit>
###############################################################################
# ELIMINAR/IGNORAR FICHEROS ###################################################
###############################################################################
# Eliminar un fichero del directorio de trabajo
git rm <file>
# Eliminar todos los ficheros (borrados en el disco) del directorio de trabajo
git rm $(git ls-files --deleted)
# Ignorar un fichero que ya ha sido inicializado/añadido al repositorio (conservándolo)
git rm --cached <file>
# Ignorar todos los ficheros del .gitignore que ya han sido inicializados/añadidos al repositorio (conservándolos)
# Nota: después `git add .` y `git commit -m ".gitignore is now working"`
# Ref: http://stackoverflow.com/questions/1139762/ignore-files-that-have-already-been-committed-to-a-git-repository
git rm -r --cached .
###############################################################################
# CONFIGURACIÓN ###############################################################
###############################################################################
# Configurar email y nombre
git config --global user.name "John Doe"
git config --global user.email "[email protected]"
# Mostrar la configuración
git config --list
# Mostrar la configuración global
cat ~/.gitconfig
# Mostrar la configuración local (dentro del proyecto)
cat .git/config
# Añadir más color al resultado
git config --global color.ui 1
# Mostrar el log en una linea por commit
git config --global format.pretty oneline
###############################################################################
# CREAR UN REPOSITORIO EN GITHUB DESDE LA TERMINAL ############################
###############################################################################
# Crear el repositorio en Github (Github API v3)
curl -u '<user>' https://api.github.com/user/repos -d '{ "name": "<repository>" }'
# Añadir el repositorio remoto de Github a nuestro repositorio local
git remote add origin [email protected]:<user>/<repository>.git
# Enviar cambios del repositorio local a Github
git push origin master
###############################################################################
# ACTUALIZAR UN FORK ##########################################################
###############################################################################
# Añadir como remoto el repositorio orignal de Github a nuestra copia local (llamándolo "upstream")
git remote add upstream https://github.com/<original-user>/<original-repository>.git
# Actualizar todas las ramas desde el repositorio original
# Los commits se guardarán en la rama local "upstream/master"
git fetch upstream
# Asegurarnos de que estamos en nuestra rama "master"
git checkout master
# Sobreescribir nuestra rama "master" con la rama "upstream/master"
# NOTA: si no queremos sobreescribir el historial del proyecto (porque otra persona lo haya clonado, etc.)
# usar `git merge upstream/master` en vez rebase...
git rebase upstream/master
# Subir el proyecto a nuestro repositorio
# NOTA: si hemos utilizado merge en el paso anterior no es necesario forzar el push (opción -f)
git push -f origin master
@robertoandres24
Copy link

excelllent.thanks for sharing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment