Git - Guía básica
Acciones básicas
Cambiar de rama
git branch
git checkout <rama>
Crear una nueva rama
git checkout -b <nueva-rama>
git add <fichero-1> <...> <fichero-n>
git commit
git push origin <nueva-rama>
Unimos dos ramas
git checkout <rama-principal>
git merge <nueva-rama>
git branch -d <nueva-rama>
git push origin <rama-principal>
git push origin --delete <nueva-rama>
Restaurar el repositorio local
# El equivalente de git al `hg update -C` de mercurial:
git checkout <fichero1> <fichero2> ... <fichero_n>
git checkout -f
Guardar cambios locales antes de hacer un pull
git stash # git stash save
git pull
git stash pop
Para activar una rama cuando sólo nos hemos clonado la máster
git fetch
git checkout <rama-por-activar>
git diff master <rama-por-activar>
Para cambiar el usuario de uno o varios commits
# Añadimos un alias a nuestro archivo de configuración de git (~/.gitconfig):
change-commits = "!f() { VAR=$1; OLD=$2; NEW=$3; shift 3; git filter-branch --env-filter \"if [[ $`echo $VAR` = \\\"$OLD\\\" ]]; then export $VAR=\\\"$NEW\\\"; fi\" $@; }; f "
# Una vez estamos en el reposotorio al que le queremos modificar los commits:
# (Está bien asegurarse antes que no tenemos nada por descargar para que no tengamos que hacer ningún merge)
git change-commits GIT_AUTHOR_NAME "nombre antiguo" "nombre nuevo"
git change-commits GIT_AUTHOR_EMAIL "email antiguo" "email nuevo"
# Unimos los commits antiguos y los nuevos:
git pull
# Subimos los nuevos commits al repositorio en lugar de los antiguos:
git push origin master
Devolver un archivo a una revisión concreta
# Suponiendo que queremos volver al estado de la revisión abcde:
git checkout abcde <fichero>
Arreglar un HEAD deatached con master
# Creamos una nueva rama apuntando al commit que queramos:
git branch <nueva_rama> <commit_id>
# Fusionamos la rama nueva en master:
git branch -f master <nueva_rama>
# Cambiamos a la rama master:
git checkout master
# Borramos la nueva rama:
git branch -d <nueva_rama>
Eliminar commit no subido
git reset
Eliminar último commit subido (pushed)
# Situarse en el commit a eliminar:
git reset HEAD^
# Deshacer los cambios que pudiera haber:
git checkout -- .
–
Para cambiar de rama:
# Primero listamos las ramas:
git branch
# Una vez sabemos a qué rama queremos cambiar:
git checkout <rama>
# Si la rama no está creada:
git checkout -b <rama-nueva>
Para commitear a una nueva rama:
# Cambiamos de rama con el parámetro -b para crear la rama previamente:
git checkout -b <nueva-rama>
# Añadimos al commit todos los ficheros que necesitemos:
git add <fichero-1> <...> <fichero-n>
# Hacemos el commit:
git commit
# Subimos la nueva rama al repositorio:
git push origin <nueva-rama>
Si queremos unir dos ramas (hacer un merge):
# Suponiendo que estamos en la rama <nueva-rama>.
# Primero nos cambiamos a la rama principal (a la que queremos unir los cambios de la rama nueva):
git checkout <rama-principal>
# Hacemos un merge entre la rama nueva y la rama principal:
git merge <nueva-rama>
# Subimos la rama principal al repositorio una vez hecho el merge:
git push origin <rama-principal>
# Si queremos eliminar localmente la rama nueva:
git branch -d <nueva-rama>
# Si también queremos eliminar remotamente (en el servidor del repositorio) la rama nueva:
git push origin --delete <nueva-rama>
Si hemos estado tocando cosas y queremos volver al estado original del repositorio (a la última revisión subida al servidor):
# Si es para uno o varios ficheros en concreto:
git checkout <fichero_1> <fichero_2> ... <fichero_n>
# Si lo queremos hacer global para todos los ficheros del repositorio:
git checkout -f
Para activar una rama cuando nos acabamos de clonar el repositorio y sólo tenemos la rama máster:
# Nos descargamos todos los posibles cambios del repositorio:
git fetch --all
# Comprobamos todas las ramas existentes:
git branch -a
# Cambiamos a la rama que queramos activar en local:
git checkout <rama-por-activar>
# Para asegurarnos, podemos ver las diferencias entre la rama máster y la nueva:
git diff master <rama-por-activar>
Denominación de ramas
- feature/T-456-user-authentication
- bugfix/T-789-fix-header-styling
- hotfix/T-321-security-patch
- release/v2.0.1
- docs/T-654-update-readme
Actualizado el