Control de Versiones

GIT, branches

  1. Qué es una rama
  2. Crear una rama
  3. Listar ramas
  4. Crear una rama huérfana
  5. Cambiarse entre ramas
  6. Fusionar cambios de una rama en otra
  7. Subir rama a remoto
  8. Subir todas las ramas al remoto
  9. Resolver errores de git push
  10. Resolver errores de git pull
  11. Recuperar archivos del stash

Qué es una rama

Una rama Git es un apuntador móvil apuntando a un commit. La rama por defecto de Git es la rama master. Con el primer commit que realicemos, se creará esta rama principal master apuntando a ese commit. En cada commit que realicemos, la rama irá avanzando automáticamente. Y la rama master apuntará siempre al último commit realizado.

Crear una rama

¿Qué sucede cuando creas una nueva rama? Bueno..., simplemente se crea un nuevo apuntador para que lo puedas mover libremente. Por ejemplo, si quieres crear una nueva rama denominada "testing". Usarás el comando git branch:
git branch testing

Se crea la nueva rama, la cual apunta al commit en el que estas actualmente, y tu HEAD también se mantiene ahí.

Listar las ramas

Para mostrar la lista de todas las ramas locales el comando se git branch.
git branch

Se pueden listar también las ramas del remoto con --all

git branch --all

Cambiarse entre ramas

Para saltar de una rama a otra, tienes que utilizar el comando git checkout.
git checkout testing

Crear y cambiarse de rama

Podemos ahorrar pasos y crear y cambiarnos de rama al mismo tiempo.
git checkout -b testing

Crear una rama con historia limpia

Si se diese el caso de requerir una rama sin historia, es decir, inciando en el primer punto de la historia, se puede lograr con *orphan*
git checkout --orphan rama

Fusionar cambios de una rama en otra

Para incorporar en una rama los cambios de otros, esta fusión se hace con el comando git merge.
Es importante que siempre este primero ubicado en la rama destino.
git merge master

git merge toma los cambios de la rama indicada y los fusiona en la historia de la rama sobre la cual se ejecutó el comando.

Subir rama a remoto

Utilizamos el comando git push [remoto] [rama]
git push origin testing

Subir todas las ramas al remoto

Utilizamos el comando git push --all [remoto]
git push --all origin

Resolución de errores al hacer push

Si se intenta subir cambios, pero nuestra rama no esta actualizada, nos marcará este error
To github.com:nmicht/mdweb-practica-git.git
 ! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:nmicht/mdweb-practica-git.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
La solución, tal como lo dice el mensaje, es hacer git pull y con ello actualizaremos nuestra rama local con los datos actuales en el remoto.
git pull
Después, ya solo basta con volver a intentar el push.

Resolucion de errores al hacer pull

En ocasiones, cuando intentamos obtener cambios de un remoto, no nos permite porque tenemos archivos en nuestro local que no han sido commiteados en la historia. La primer opción es borrar el archivo, pero, no siempre es la ideal. La otra opción es guardarlo temporalmente para luego volverlo a recuperar.
Este es el ejemplo del error
From github.com:nmicht/mdweb-practica-git
 * branch            dev        -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
	test
Please move or remove them before you merge.
Aborting
Primero, agregas tu archivo pendiente al stage
git add .
Mandas tu archivo al stash (almacenado temporalmente pero fuera de la historia)
git stash

Recuperando archivos del stage

El stage es un pila de archivos que hemos ido guardando temporalmente. Cuando los quieras recuperar, solo necesitas llamar el primer elemento de la pila.
git stash pop
Ir al siguiente módulo