Git - Guía básica

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

  1. feature/T-456-user-authentication
  2. bugfix/T-789-fix-header-styling
  3. hotfix/T-321-security-patch
  4. release/v2.0.1
  5. docs/T-654-update-readme
Actualizado el