11.1 Ramas en git
Trabajar con ramas (branches) en Git es uno de los aspectos clave de la gestión de versiones, que te permite llevar varias líneas de desarrollo en paralelo dentro de un mismo repositorio. Ramificar hace de Git una herramienta poderosa para la colaboración, experimentación y gestión de diferentes versiones de un proyecto.
Puedes pensar en las ramas de git como carpetas donde git copia tu proyecto. Tienes la carpeta principal de tu proyecto en tu repositorio local — master, y git puede crear copias de esa carpeta para que pruebes algo sin arruinar el código principal que funciona bien. Esas carpetas-copia se llaman ramas — branches.
Las ramas son alternativas al código. Supongamos que quieres modificar algo en un gran proyecto, llevar a cabo un experimento del que no estás completamente seguro. ¿Cómo lo harías sin git?
Podrías copiar el proyecto en una nueva carpeta y tratar de cambiar todo allí. Si el resultado te gusta, puedes copiarlo a la carpeta principal. Si no te gusta — olvídalo o elimínalo completamente.
O tomemos un ejemplo de la vida real. Digamos, escribir un libro:
- Tienes el manuscrito (rama principal).
- Quieres intentar cambiar el final (creación de una nueva rama).
- Escribes el nuevo final en un documento separado (trabajo en la nueva rama).
- Si el nuevo final es mejor, sustituyes el viejo en el manuscrito (fusiones de ramas).
- Eliminas el documento separado con el nuevo final (eliminación de rama).
11.2 Creación de ramas
Crear una rama en IntelliJ IDEA es muy fácil:
Introduce el nombre de la rama:
Intellij IDEA mostrará inmediatamente el nombre de tu rama actual en la parte superior del menú:
¿Qué había allí antes?
Allí estaba el nombre de tu primera y principal rama — master.
Ahora se muestra test, lo que significa que Git (bajo la dirección de IntelliJ IDEA) no solo ha creado una nueva rama, sino que también se ha cambiado a ella de inmediato.
Vamos a añadir algún código en el archivo main.html en la rama actual (test) y hacer commit:
11.3 Cambiando entre ramas
Paso 1. Elegir la rama.
Ahora vamos a cambiar a nuestra vieja rama. Hacemos clic en el menú superior, y ¿qué vemos ahí?
No te asustes — todo es simple aquí:
Local — es la lista de ramas de tu repositorio git local. Hay dos:
- test
- master
Remote — es tu repositorio remoto, que está en el servidor de GitHub. Subimos tus cambios allí, pero no hay una nueva rama, lo cual es lógico. El repositorio remoto se llama origin, y solo tiene la rama master.
Recent — es solo una lista de los nombres de las últimas ramas con las que has trabajado: este elemento lo agrega IntelliJ IDEA para comodidad y rapidez.
El nombre origin/master a la derecha del nombre del repositorio local — es el nombre del repositorio remoto con el que está sincronizado actualmente, y donde se subirán los cambios.
Paso 2. Descargar el código de la rama en la carpeta actual.
Paso 3. Comprobar.
Veo que la rama «master» y el código antiguo se muestran:
11.4 Fusionar ramas
Ahora intentemos fusionar el código de nuestras dos ramas.
Paso 1. Para empezar, añadamos otro archivo a nuestro proyecto — index.html y escribamos algún código en él:
- Crear el archivo index.html
- Escribir el código <h1>Hello</h1>
- Hacer commit del archivo
Así es como se ven mis dos archivos en la rama master:
Paso 2. Fusionar ramas.
Vamos a fusionar en nuestra rama actual (master) los cambios realizados en la rama test.
Para esto, también usaremos el menú superior y el comando «Merge ‘test’ into ‘master’»:
Paso 3. Verificar el resultado.
Verificar:
- La rama master todavía se muestra arriba
- Tenemos 2 archivos: index.html y main.html
- El archivo main.html contiene el código añadido en la rama test
11.5 Conflictos al fusionar
A veces, al fusionar ramas, ocurren conflictos.
Si haces cambios en un archivo en diferentes ramas e intentas fusionarlos, puede surgir un conflicto.
Conflicto de archivos de texto
Git es un sistema muy inteligente — entiende los tipos de archivos. Si haces cambios en diferentes lugares de archivos que considera textuales, simplemente trasladará los cambios de un archivo a otro en el lugar correcto (como lo haría una persona).
Conflicto de archivos binarios
Pero si modificas una imagen o documento, Git no intentará combinarlos en uno: simplemente te pedirá que elijas qué versión del archivo deseas conservar en la rama actual.
Resolución manual de conflictos
Si haces cambios en el mismo lugar de un archivo de texto, Git no podrá fusionar correctamente las versiones y te pedirá que lo hagas:
Así es como puede verse:
¿Qué ves aquí?
- A la izquierda — contenido del archivo main.html de la rama master
- A la derecha — contenido del archivo main.html de la rama test
- En el medio, IntelliJ IDEA te sugiere escribir la versión final del código (puedes hacer clic en los botones «>>» y «<<» para insertar cambios automáticamente desde algún archivo)
Acepté la opción master y añadí el código manualmente. Así es como quedó:
11.6 Historia de cambios
Algo más útil e interesante. Puedes ver la historia de cambios de cualquier archivo, haciendo clic en el botón Show History. Hay dos lugares donde puede encontrarse. Encuéntralos.
Así es como luce la historia de cambios para mí en el archivo main.html:
Explicaciones:
-
A la izquierda ves la historia de cambios de un archivo en particular:
- Cuanto más reciente es el cambio, más arriba está; cuanto más antiguo, más abajo
- También muestra la historia de la fusión de ramas
- A la derecha — los cambios que se hicieron en un commit específico
GO TO FULL VERSION