Git - Branch
Concepto
-
git branch - (Rama)
-
Se puede considera como un [Puntero] que siempre señala la rama ‘branch’ que le indiquemos o nos encontremos
- Por defecto apunta a la rama :
master/main
dependiendo de la configuración inicial que tengamos por defecto en GIT al instalarlo en el sistema
- Por defecto apunta a la rama :
Representa una especie de línea de tiempo que va marcando los distintos cambios que le vamos haciendo a los archivos del proyecto a través de los
git add <archive>
y losgit commit -m "Mensaje"
que vamos ejecutando sobre el repositorio principal
-
Según en la rama en la que nos encontremos puede tener un desarrollo igual o distinto a otra del proyecto
-
Una rama puede empezar en cualquier
commit
del repositorio del proyecto principal -
Los
nuevos commits
siempre se añaden al final del grafo del historial decommits
del proyecto -
Importante
- Solo se creará nuestra primera linea de tiempo funcional cuando hagamos nuestro
primer commit
la cual estará establecida en la ramamaster
si no hemos creado una rama distinta y nos hemos cambiado a ella mediantegit checkout <nombre de la rama>
- Solo se creará nuestra primera linea de tiempo funcional cuando hagamos nuestro
-
Si intentamos cambiarnos de
rama/branch
mediante el comandogit checkout <rama>
sin que estarama/branch
exista; nos aparecerá el siguiente mensaje :
fatal: error: pathspec ‘rama-x’ did not match any file(s) known to git
Para saber en que rama/branch
nos encontramos podemos ejecutar los comandos :
git status
→ On branch master
git branch
# El ASTERISCO * al comienzo de la rama 'master' indica que HEAD esta apuntando a esa rama
* master → Indica la rama en la que nos encontramos # HEAD esta apuntando a esta rama
nueva-rama-proyecto
- En esta imagen podemos ver un ejemplo del funcionamiento y desarrollo de las
ramas
-
La rama por defecto se llama
master
y se crea de forma automática por el sistemagit
con el primercommit
-
Los nuevos
commits
se añaden al final de la rama -
Los
commits
de las ramas están ordenados por fecha -
Se pueden
crear
,eliminar
tantasramas
como se necesiten para cada momento
Opciones del comando branch
- Listado básico de algunas de las opciones más importantes
Opción -v
- Muestra información de las ramas que tengas y el último commit en el que se encuentre
git branch -v
develop e1d6b344 Merge pull request #65 from rvsweb/feature-a
* feature-a e1d6b344 Merge pull request #65 from rvsweb/feature-a
master e1d6b344 Merge pull request #65 from rvsweb/feature-a
- Muestran todas las ramas locales , rama remotas y ramas tracking con sus ramas remotas asociadas y su estado
git branch -vva
Opción -M
- Ejecuta 2 opciones en 1
- Por un lado ejecuta la opción
--force
- Que restablece una
<rama>
a un<punto de partida/startpoint>
incluso si existe
- Que restablece una
- Por el otro lado ejecuta la opción
--move
- Permite cambiar el nombre de la
<rama>
incluso si la nueva<rama>
ya existe
- Permite cambiar el nombre de la
- Por un lado ejecuta la opción
- Ejemplo :
git branch -M <rama>
Opción -r
- Muestra todas las ramas remotas
git branch -r
# Resultado
origin/HEAD -> origin/master
origin/develop
origin/feature-a
origin/master
Opción -a
- Muestra todas las locales / tracking / ramas remotas del Repositorio Remoto
git branch -a
# Resultado
develop
* feature-a
master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/feature-a
remotes/origin/master
Opción --merged
- Muestra todas las ramas que se han fusionado con la rama en la que nos encontremos
git branch --merged
# Resultado
develop
* feature-a
master
Opción --no-merge
- Muestra todas las ramas no fusionadas con la rama en la que nos encontremos
git branch --no-merge
# Resultado
testing
Comando para mostrar las ramas
que tienen disponible el proyecto
- Ejecutar el siguiente comando
git branch
Salida:
develop
* master
- Crear una nueva
rama
git branch nueva-rama-proyecto
Salida:
develop
* master
nueva-rama-proyecto
- Eliminar la una nueva rama
git branch -d nueva-rama-proyecto
Salida:
Deleted branch nueva-rama-proyecto (was 5c2b6a9)
- Crear una nueva rama desde un commit alojado en otra rama
# Nombre de la nueva rama
# que voy a crear
# para almacenar el contenido
# del commit de la rama máster
# ↓
# ↓ Commit de la rama por ejemplo 'master'
# ↓ que utilizo para copiar los archivos que
# ↓ tiene ese commit dentro de la
# ↓ rama master y así añadírselo al commit
# ↓ de la nueva 'rama_x' que acabo de crear
# ↓ ↓
# ↓ ↓
git branch rama_x 56324fg8
- Crear una nueva rama desde un commit que seleccionemos desde el grafo de commits del proyecto
git branch <nombre-rama> <id-commit>
# Ejemplo
git branch rama-alternativa b0e63ad
# Otra forma alternativa de ejecutar el comando
git checkout -b <nombre-rama> <id-commit>
# Ejemplo
git checkout -b rama-alternativa b0e63ad
- Cambiar el nombre de una rama creada
- Tenemos que están dentro de la rama que queremos cambiarle el nombre
- Cuando usas el comando
git -m
. Git también actualiza tu rama de seguimiento/tracking branch con el nuevo nombre.
git branch -m <nuevo-nombre-rama>
Ramas Tracking
- Crear ramas tracking asociadas a una rama remota mediante los comandos
- La opción
-b
crea una rama
- La opción
git branch -b <nombre-rama-local> <rama-tracking>/<rama-repo.remoto>
# Ejemplo
git branch -b rama-alternativa origin/rama-alternativa
git branch --track <rama-tracking>/<rama-repo.remoto>
# Ejemplo
git branch --track origin/rama-alternativa
git branch --track <rama-tracking>/<rama-repo.remoto>
# Ejemplo
git branch --track rama-aux origin/master
Ramas necesarias para un proyecto
-
Para ciertos tipos de proyectos existen unas
ramas
básicas: -
Las ramas típicas son : master feature developer hotfix release
Estas ramas se puede ir creando dependiendo de las necesidades del proyecto
Descripción de las Ramas
-
master → Rama Principal , predefinida y estándar (No tocar)
-
Sobre esta rama nunca se trabajará ya que es donde se van a integrar todos los cambios las demás
ramas
que vayamos haciendo en el proyecto -
Es la rama de sólo y para Producción
-
Lo recomendable a la hora de trabajar con nuestro proyecto es crear una
rama
a partir de estarama
llamada master como puede ser larama developer
y fusionar los cambios que sean correcto a larama master
mediante unpull request
-
-
developer → Rama Secundaria
[Rama Padre : Master]
-
Creada a partir de la rama master en la mayoría de lo casos
-
En la mayoría de los casos tiene las funcionalidades de la aplicación , website , no es aconsejable hacer commits desde esta rama, solo para pequeños cambios; ejemplo : Cambiar el texto
-
-
release → Rama Terciaria
[Rama Padre : Master]
-
Creada a partir de la rama master en la mayoría de lo casos
-
Se utiliza para entregar en Producción , su propósito es habilitar pruebas de clientes con ellas , cuando se terminen las pruebas y estén correctas dichas pruebas se fusionarán con la rama master
-
-
hotfix → Rama Terciaria
[Rama Padre : Master]
-
Creada a partir de la rama master en la mayoría de lo casos
-
Esta rama se usa para la solución de incidentes urgentes sobre todo en ambientes de producción que necesitan una rápida respuesta.
-
-
feature → Rama Terciaria
[Rama Padre : Developer]
-
Creada a partir de la rama developer en la mayoría de lo casos
-
Es la rama donde se crean nuevas funcionalidades para la aplicación con la que estemos trabajando , una vez terminada y comprobada que funciona correctamente se fusiona con la rama developer y se elimina mediante el comando
git -d <feature>
-
A la vez pueden existir varias ramas que iremos llamando :
feature 1
ofeature A
ofeature Access-DB
→ Todo dependiendo de la necesidad
-
Ejemplo
Aclaraciones
Lo comentado en esta sección no es una obligación pero si entra en las buenas prácticas a la hora de gestionar un proyecto de ámbito general con GIT y GITHUB además de que es flexible a las necesidades de cada caso o proyecto
Considerarse como unas pautas básicas libres de seguir pero importante a tener en cuenta ya que cada empresa , equipo de desarrollo o ámbito profesional tendrán sus propias reglas , estándar de desarrollo y demás condiciones de uso en este ámbito del desarrollo de software.
Breve Resumen Final (Rama/Branch)
-
La rama por defecto es la llamada rama master ; se crea de forma automática por el sistema
bash
pero se configurar para que no sea así -
Los nuevos commits se añaden al final del historial de commits de la rama en la que nos encontremos trabajando
-
Los commits de las ramas siempre están ordenados por fecha
-
Se pueden crear y eliminar tantas ramas como se necesiten para cada momento del desarrollo del proyecto
Deja un comentario