Difference between revisions of "Git, Branching"

From Wiki de Caballero
Jump to navigation Jump to search
Line 1: Line 1:
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.
''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.
Existe un puntero HEAD que apunta a la rama actual.
Line 8: Line 8:


El [http://git-scm.com/book/en/Git-Branching-Branching-Workflows libro oficial] muestra un par de formas de trabajo con ramas, flujos de trabajo.
El [http://git-scm.com/book/en/Git-Branching-Branching-Workflows 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==
==Crear una rama nueva, nueva branch==
Para crear una rama nueva se ejecuta el siguiente comando.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
git branch nuevaRama
git branch nuevaRama
</syntaxhighlight>
</syntaxhighlight>
'''Nota''': Esto no carga la rama directamente, solo la crea.


==Listar ramas==
==Listar ramas==
Line 43: Line 47:


==Merge branches (unificar ramas)==
==Merge branches (unificar ramas)==
Lo siguiente deja como rama de trabajo a ''master'' y sobre esta introduce nuevaRama.
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
git checkout master # Se carga la rama master estando en otra rama
git checkout master # Se carga la rama master estando en otra rama
Line 52: Line 57:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
git branch -d nuevaRama
git branch -d nuevaRama
</syntaxhighlight>
==Remotes, ramas remotas==
===Obtener rama remota===
No muestra los archivos obtenidos solo los obtiene.
<syntaxhighlight lang="bash">
git fetch nombreRemote [nombreRama] # Si no se especifica nombreRama obtiene master
</syntaxhighlight>
===Obtener cambios de rama remota===
Se obtienen los archivos y luego se mezclan con lo que hay en el directorio de trabajo.
<syntaxhighlight lang="bash">
git pull nombreRemote nombreRamaRemote # Si no especifico HEAD me pide una versión
</syntaxhighlight>
===Subir cambios a rama remota===
<syntaxhighlight lang="bash">
git push nombreRemote nombreRama[:nombreRamaEnServidor] # :nombreRamaEnServidor es opcional y setea el nombre de la rama en el servidor
</syntaxhighlight>
===Tracking Branches, ramas locales que siguen una rama remota===
Son ramas que permiten hacer <code>git push</code> y <code>git pull</code> 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.
<syntaxhighlight lang="bash">
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
</syntaxhighlight>
===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.
<syntaxhighlight lang="bash">
git push nombreRemote :nombreRama
</syntaxhighlight>
</syntaxhighlight>



Revision as of 16:23, 12 November 2013

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 mestra 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

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

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.