11.1 Ramas en git
Trabajar con ramas (branches)
en Git es uno de
los aspectos clave de la gestión de versiones, que permite llevar
varias líneas de desarrollo en paralelo en un solo repositorio.
Ramificar hace que Git sea una herramienta poderosa para
colaboración, experimentación y gestión de diferentes versiones de
un proyecto.
Puedes ver las ramas en Git como carpetas, donde Git copia tu proyecto. Tienes la carpeta principal de tu proyecto en tu repositorio local
— master
. Git puede crear copias de esta carpeta para que puedas experimentar sin arriesgar dañar el código principal que funciona bien. Estas carpetas-copia se llaman ramas — branches
.
Las ramas son variantes alternativas del código. Imagina que quieres rehacer algo en un gran proyecto o hacer un experimento en el cual no estás del todo seguro. ¿Qué harías sin Git?
Podrías copiar el proyecto en una nueva carpeta y tratar de cambiar todo allí. Si te gusta el resultado, puedes copiarlo en la carpeta principal. Si no te gusta — olvídate de él, o simplemente elimínalo.
Veamos un ejemplo de la vida real, como escribir un libro:
- Tienes un manuscrito del libro (rama principal).
- Decides 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 resulta mejor, reemplazarás el antiguo en el manuscrito (fusión de ramas).
- Eliminas el documento con el nuevo final (eliminación de la rama).
11.2 Creación de ramas
Crear una rama en PyCharm es muy fácil.
Introduce el nombre de la rama.
PyCharm inmediatamente mostrará el nombre de tu rama actual en la parte superior del menú:
¿Qué había antes?
Antes se mostraba el nombre de tu primera y principal rama —
master
.
Ahora se muestra test
, lo que significa que Git (bajo la
dirección de PyCharm) no solo creó una nueva rama, sino que también
cambió inmediatamente a ella.
Agreguemos algún código al archivo main.py
de la rama actual (test)
y hagamos commit.
11.3 Cambiando entre ramas
Paso 1. Selecciona la rama.
Ahora vamos a cambiar a nuestra vieja rama. Haz clic en el menú superior, y ¿qué vemos allí?
No te confundas — todo es muy sencillo:
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 GitHub. Hemos enviado 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 la lista de nombres de las últimas ramas con
las que trabajaste. Este punto se ha añadido en PyCharm para mayor
comodidad y rapidez.
El nombre origin/master
a la derecha del nombre del
repositorio local — es el nombre del repositorio remoto, con el cual está
sincronizado actualmente, y donde se enviarán los cambios.
Paso 2. — Cargamos el código de la rama en la carpeta actual.
Paso 3. Revisamos:.
Me aparece la rama (master)
y el código antiguo.
11.4 Fusionando ramas
Ahora intentemos combinar el código de nuestras dos ramas.
Paso 1. Primero, añadamos a nuestro proyecto un archivo más — init.py y escribamos en él algún código.
- Creando archivo init.py
- Escribimos dentro print("Hola")
- Cometemos el archivo.
Así es como se ven mis dos archivos en la rama master
:
Paso 2. Fusiones de ramas.
Fusionaremos en nuestra rama actual (master)
los cambios que se hicieron
en la rama test
.
Para ello, también utilizaremos el menú superior y el comando «Merge ‘test’
into ‘master’»
.
Paso 3. Revisamos el resultado:.
Revisamos:
- Sigue mostrando la rama
master
arriba - Tenemos dos archivos: init.py y main.py
-
El archivo main.py contiene el código que se agregó en la rama
test
.
11.5 Conflictos al fusionar
A veces hay conflictos al fusionar ramas.
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, reconoce 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 haces cambios en una imagen o documento, Git no intentará fusionar sus partes en un archivo, simplemente te pedirá elegir qué versión del archivo quieres dejar 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 diferentes versiones y te propondrá hacerlo a ti.
Así es como podría verse:
¿Qué ves aquí?:
- A la izquierda el contenido del archivo main.py de la rama master
- A la derecha el contenido del archivo main.py de la rama
test
-
En medio, PyCharm te propone escribir la versión final del código
(puedes hacer clic en los botones
«>>»
y«<<»
, para insertar automáticamente los cambios de uno de los archivos).
Acepté la variante master
y escribí el código a mano. Esto fue lo que
obtuve.
11.6 Historia de los cambios
También es ú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éntrala.
Así es como se ve la historia de cambios para mí en el archivo main.py:
Explicaciones:
-
A la izquierda ves la historia de cambios del archivo específico:
- Cuanto más reciente es el cambio, más arriba está; cuanto más antiguo — más abajo.
- Aquí también se muestra la historia de la fusión de ramas.
- A la derecha — los cambios realizados en un commit específico.
GO TO FULL VERSION