Git, Branching

From Wiki de Caballero
Revision as of 16:49, 24 August 2015 by Alex (talk | contribs) (→‎Remotes, ramas remotas)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Branching funciona como caminos diferentes que pueden volver a unirse. En un punto determinado de la historia del proyecto se crean dos caminos que contienen lo mismo pero que pueden cambiar independientemente.

Existe un puntero HEAD que apunta a la rama actual.

La rama maestra se crea por defecto y se llama master.

Antes de cambiar de rama (checkout) es buena idea hacer un commit.

El libro oficial muestra un par de formas de trabajo con ramas, flujos de trabajo.

Cuando se trabaja remotamente se trabaja con ramas, la rama remota por defecto es origin/master, origin siendo el remote y master siendo la rama.

Crear una rama nueva, nueva branch

Para crear una rama nueva se ejecuta el siguiente comando.

git branch nuevaRama

Nota: Esto no carga la rama directamente, solo la crea.

Listar ramas

git branch

Para más información ver libro oficial.

Cargar una rama

Este comando carga el contenido de una rama y hace que el puntero HEAD apunte a dicha rama.

git checkout nuevaRama

Cargar la rama maestra

Este comando carga el contenido de la rama maestra y hace que el puntero HEAD apunte a dicha rama.

git checkout master

Crear rama y cargarla

git checkout -b nuevaRama

Es un atajo que hace lo mismo que:

git branch nuevaRama
git checkout nuevaRama

Merge branches (unificar ramas)

Lo siguiente deja como rama de trabajo a master y sobre esta introduce nuevaRama.

git checkout master	# Se carga la rama master estando en otra rama
git merge nuevaRama	# Se hace merge de la nuevaRama sobre master

Otra forma de llegar al mismo resultado de un merge es haciendo un rebasing que integra todos los cambios que se han producido en una rama a otra y desapareciendo la rama. Para más información de cómo funciona y casos de uso ver libro oficial.

Borrar una rama

Se pueden borrar ramas cuando se desee pero puede ser buena idea hacerlo cuando se planee no usarla más, eso puede ocurrir por ejemplo cuando se trabajo en una rama, se unió al master y ya no tiene sentido tener la rama todavía porque no se va a trabajar más sobre ella.

git branch -d nuevaRama

Remotes, ramas remotas

Listar rama remota

Para ver las ramas remotas a las que hacemos seguimiento, utilizamos el comando branch con el parámetro -r:

git branch -r

Agregar remote

El siguiente comando agrega un remote al proyecto Git actual, esto solo asocia un remote al proyecto pero no obtiene los archivos. nombreReferencia es un nombre arbitratio que se le da al remote para referenciarlo.

git remote add nombreReferencia username@host:/path/to/nombreRepositorio

Obtener rama remota

No muestra los archivos obtenidos solo los obtiene.

git fetch nombreRemote [nombreRama] # Si no se especifica nombreRama obtiene master

Obtener cambios de rama remota

Se obtienen los archivos y luego se mezclan con lo que hay en el directorio de trabajo.

git pull nombreRemote nombreRamaRemote # Si no especifico HEAD me pide una versión

Subir cambios a rama remota

git push nombreRemote nombreRama[:nombreRamaEnServidor] # :nombreRamaEnServidor es opcional y setea el nombre de la rama en el servidor

Tracking Branches, ramas locales que siguen una rama remota

Son ramas que permiten hacer git push y git pull sin argumentos, tienen una relación directa con la rama remota. Los siguientes comandos hacen lo mismo: crean una rama local, obtienen la fuente de una rama remota y asocian la rama remota con la local.

git checkout -b nombreRamaLocal nombreRemote/nombreRamaRemote	# Forma de creación generica
git checkout --track nombreRemote/nombreRamaRemote		# Forma reducida, no se especifica nombre local, Git > v1.6.2

Borrar ramas remotas

Conceptualmente, el siguiente comando hace que se suba una rama local inexistente en una rama remota, lo que hace que se borre la remota.

git push nombreRemote :nombreRama

Conflictos

Para más información sobre cuando se producen conflictos y cómo resolverlos trabajando con branches, ver libro oficial.