Control de Versiones
GIT, branches
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