imagen rama

USANDO RAMAS

El modelo de colaboración de Git ofrece a cada desarrollador su propia copia del repositorio central, completo con su propia historia y la rama de la estructura local. Normalmente, los usuarios necesitan compartir una serie de commits en lugar de un conjunto de cambios. Git te permite compartir ramas enteras entre repositorios.


git branch


Una rama representa una línea independiente de desarrollo. Las ramas sirven como una abstracción para el proceso de editar/etapa/commit. Se puede pensar en ellos como una manera de solicitar un nuevo directorio de trabajo, área de ensayo e historia del proyecto.

El comando git branch le permite crear, listar, renombrar y eliminar ramas. Por esta razón, git branch está estrechamente integrado con los comandos git checkout y git merge.


Uso


git branch

Lista todas las ramas de tu repositorio.

git branch <rama>

Crea una nueva rama llamada <rama>.Esto no te ubica a la nueva rama.

git branch -d <rama>

Elimina la rama especificada llamada <rama>.Ésta es una operación segura en la que Git le impide eliminar la rama si tiene cambios sin combinar.

git branch -D <rama>

Fuerza a eliminar la rama especificada, incluso si no tiene cambios sin combinar.

git branch -m <rama>

Renombra la rama actual a <rama>


Ejemplos


Es importante entender que las ramas son punteros de commits. Cuando creas una rama, todo lo que Git necesita hacer es crear un nuevo apuntador - esto no cambia el repositorio de ninguna manera. Si comienzas con un repositorio que es como esto:

git remote imagen

Entonces, creas una rama usando el siguiente comando:

git branch modulo1

La historia del repositorio se mantiene sin cambios. Todo lo que obtienes es un nuevo apuntador del commit actual:

git remote imagen

Note que esto solo cre una nueva rama. Para empezar a agregar commits a esta, necesitas seleccionar esto con git checkout, y entonces use los comandos estandar git add y git commit.Por favor vea la sección git checkout de este módulo para más información.


Eliminando ramas


Una vez que ha finalizado su trabajo sobre la rama y ha combinado ésta dentro del código base, eres libre de eliminar la rama sin perder alguna historia:

git branch -d modulo1

Sin embargo, si la rama no ha sido combinada, el comando puede tener como salida un mensaje de error:

error: The branch 'crazy-experiment' is not fully merged.
If you are sure you want to delete it, run 'git branch -D crazy-experiment'.

Esto protege de perder tu referencia a esos commits, lo cual significa que podrías efectivamente perder acceso a la linea de la entidad de desarrollo.
Si realmente deseas eliminar la rama ,puedes usar -D:

git branch -D modulo1

Esto elimina la rama a pesar del estatus y sin avisos, úselo juiciosamente.


git checkout


El comando git checkout le permite situarce en las ramas creadas por git branch. El cambio de una rama actualiza los archivos del directorio de trabajo para que coincida con la versión almacenada en esa rama, y Git registra todas las nuevas confirmaciones en esa rama. Esto es una manera de seleccionar qué línea de desarrollo está trabajando.


Uso


git checkout <rama-existente>>

Nos cambia a la rama especificada,la cual debería haber sido creada con git branch Esto hace <rama-existente> la rama actual y actualiza el directorio de trabajo para que coincida.

git checkout -b

Crear y nos cambia a la rama <nueva rama>. La opción -b le indica a Git ejecuta git branch antes de

git checkout <nueva-rama>.
git checkout -b <nueva-rama> <rama-existente>

Ejemplo


El siguiente ejemplo demuestra el proceso de ramificación de Git. Cuando se quiere comenzar a trabajar en un nuevo feature, se crea una rama y se cambia a ésta:

git branch nuevo-feature
git checkout nuevo-feature

A continuación, puede realizar nuevos commits como hemos visto en los módulos anteriores:

# Editar algunos archivos
git add <file>
git commit -m "Started work on a new feature"
# Repetir

Todos estos se registran en el nuevo feature, que está completamente aislada de master. Puede añadir tantos commits aquí como sea necesario sin tener que preocuparse acerca de lo que está pasando en las otras ramas. Cuando llega el momento de volver a la base de código "oficial", simplemente vaya a la rama principal:

git checkout master

Esto muestra el estado del repositorio antes de empezar su feature. A partir de aquí, usted tiene la opción de fusionar en el feature de completado, se ramifican una nueva característica de la rama, o hace algún trabajo con la versión estable de su proyecto.


git merge


El comando git merge le permite tomar las líneas independientes de desarrollo creadas por git branch e integrarlos en una sola rama.

Note que los comandos que se presentan a continuación se realizan en la rama actual. La rama actual será actualizada para reflejar el merge, pero la rama objetivo no se verá afectada en absoluto. Esto significa que git merge se utiliza a menudo en combinación con git checkout para la selección de la rama y git -d branch para borrar la rama objetivo obsoleta.


Uso


git merge <branch>

Combina la rama especificada dentro de la rama actual. Git determinará automáticamente el algoritmo de combinación.

git merge --no-ff <branch>

Combina la rama especificada en la rama actual, pero siempre genera un commit de combinación (incluso si se trataba de una combinación de avance rápido). Esto es útil para documentar todas las combinaciones que se producen en su repositorio.

Una vez que haya terminado el desarrollo de un feature en una rama aislada, es importante obtener de nuevo en la base de código principal. Dependiendo de la estructura de su repositorio, Git tiene varios algoritmos distintos para lograr esto: fast-forward merge o 3-way merge.


Ejemplo


Fast-Forward Merge


Este ejemplo muestra la combinación Fast-Forward Merge. El siguiente código crea una nueva rama, añade dos commit a ella, entonces la integra en la línea principal con una combinación Fast-Forward Merge.

# Comenzar un new feature
git checkout -b new-feature master

# Editar algunos archivo
git add <file>
git commit -m "Start a feature"

# Editando algunos archivos
git add <archivo>
git commit -m "Terminando un feature"

# Combina dentro de la rama new-feature
git checkout master
git merge new-feature
git branch -d new-feature

Se trata de un workflow común para ramas puntuales de corta duración que se usan más como desarrollo aislado que una herramienta de organización para features de larga ejecución.


3-Way Merge


El siguiente ejemplo es muy similar, pero requiere un 3-Way Merge porque master avanza mientras que el feature está en progreso. Este es un escenario común para grandes features o cuando varios desarrolladores están trabajando en un proyecto de forma simultánea.

# Empezar un new-feature
git checkout -b new-feature master

# Editar algunos archivos
git add
git commit -m "Empezar un feature"

# Editar algunos archivos
git add
git commit -m "Terminando un feature"

# Desarrollar la rama master
git checkout master

# Editar algunos archivos
git add
git commit -m "Haciendo suoer-cambios estables para master"

# Combina dentro la rama new-feature
git merge new-feature
git branch -d new-feature