-
1. Inicio - Sobre el Control de Versiones
-
2. Fundamentos de Git
-
3. Ramificaciones en Git
-
4. Git en el Servidor
- 4.1 Los Protocolos
- 4.2 Configurando Git en un servidor
- 4.3 Generando tu clave pública SSH
- 4.4 Configurando el servidor
- 4.5 El demonio Git
- 4.6 HTTP Inteligente
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git en un alojamiento externo
- 4.10 Resumen
-
5. Git en entornos distribuidos
-
6. GitHub
-
7. Herramientas de Git
- 7.1 Revisión por selección
- 7.2 Organización interactiva
- 7.3 Guardado rápido y Limpieza
- 7.4 Firmando tu trabajo
- 7.5 Buscando
- 7.6 Reescribiendo la Historia
- 7.7 Reiniciar Desmitificado
- 7.8 Fusión Avanzada
- 7.9 Rerere
- 7.10 Haciendo debug con Git
- 7.11 Submódulos
- 7.12 Agrupaciones
- 7.13 Replace
- 7.14 Almacenamiento de credenciales
- 7.15 Resumen
-
8. Personalización de Git
-
9. Git y Otros Sistemas
- 9.1 Git como Cliente
- 9.2 Migración a Git
- 9.3 Resumen
-
10. Los entresijos internos de Git
-
A1. Apéndice A: Git en otros entornos
- A1.1 Interfaces gráficas
- A1.2 Git en Visual Studio
- A1.3 Git en Eclipse
- A1.4 Git con Bash
- A1.5 Git en Zsh
- A1.6 Git en Powershell
- A1.7 Resumen
-
A2. Apéndice B: Integrando Git en tus Aplicaciones
- A2.1 Git mediante Línea de Comandos
- A2.2 Libgit2
- A2.3 JGit
-
A3. Apéndice C: Comandos de Git
- A3.1 Configuración
- A3.2 Obtener y Crear Proyectos
- A3.3 Seguimiento Básico
- A3.4 Ramificar y Fusionar
- A3.5 Compartir y Actualizar Proyectos
- A3.6 Inspección y Comparación
- A3.7 Depuración
- A3.8 Parcheo
- A3.9 Correo Electrónico
- A3.10 Sistemas Externos
- A3.11 Administración
- A3.12 Comandos de Fontanería
A3.4 Apéndice C: Comandos de Git - Ramificar y Fusionar
Ramificar y Fusionar
Hay sólo un puñado de comandos que implementan la mayor parte de la funcionalidad de ramificación y fusión en Git.
git branch
El comando git branch
es en realidad una especie de herramienta de gestión de ramas. Puede listar las ramas que tienes, crear una nueva rama, eliminar ramas y cambiar el nombre de las ramas.
La mayor parte de [ch03-git-branching] está dedicada al comando branch
y es utilizado a lo largo de todo el capítulo. En primer lugar, lo introducimos en Crear una Rama Nueva y examinamos la mayor parte de sus otras características (listar y borrar) en Gestión de Ramas.
En Hacer Seguimiento a las Ramas usamos la opción git branch -u
para establecer una rama de seguimiento.
Finalmente, examinamos algo de lo que hace en segundo plano en Referencias Git.
git checkout
El comando git checkout
se usa para cambiar de rama y revisar el contenido de tu directorio de trabajo.
En primer lugar, encontramos el comando en Cambiar de Rama junto con el comando git branch
.
Vemos cómo usarlo para iniciar el seguimiento de ramas con el indicador --track
en Hacer Seguimiento a las Ramas.
Lo usamos para reintroducir los conflictos de archivos con --conflict=diff3
en Revisando Los Conflictos.
Entramos en más detalle sobre su relación con git reset
en Reiniciar Desmitificado.
Finalmente, examinamos algún detalle de implementación en La CABEZA (HEAD).
git merge
La herramienta git merge
se utiliza para fusionar uno o más ramas dentro de la rama que tienes activa. A continuación avanzará la rama actual al resultado de la fusión.
El comando git merge
fue introducido por primera en Procedimientos Básicos de Ramificación. A pesar de que se utiliza en diversos lugares en el libro, hay muy pocas variaciones del comando merge
— en general, sólo git merge <branch>
con el nombre de la rama individual que se desea combinar.
Cubrimos cómo hacer una fusión aplastada (squashed merge) (donde Git fusiona el trabajo, pero finge como si fuera simplemente un nuevo commit sin registrar la historia de la rama que se está fusionando) al final de Proyecto público bifurcado.
Repasamos mucho sobre el proceso de fusión y dirección, incluyendo el comando -Xignore-all-whitespace
y el indicador --abort
para abortar un problema de fusión en Fusión Avanzada.
Aprendimos cómo verificar las firmas antes de la fusión si tu proyecto está usando fimas GPG en Firmando Commits.
Finalmente, aprendimos sobre la fusión de subárboles en Convergencia de Subárbol.
git mergetool
El comando git mergetool
simplemente lanza un ayudante de fusión externo en caso de tener problemas con una combinación en Git.
Lo mencionamos rápidamente en Principales Conflictos que Pueden Surgir en las Fusiones y entramos en detalle sobre cómo implementar tu propia herramienta de fusión externa en Herramientas externas para fusión y diferencias.
git log
El comando git log
se utiliza para mostrar la historia registrada alcanzable de un proyecto desde la más reciente instantánea confirmada hacia atrás. Por defecto sólo se mostrará la historia de la rama en la que te encuentres, pero pueden ser dadas diferentes e incluso múltiples cabezas o ramas desde la que hacer el recorrido. También se utiliza a menudo para mostrar las diferencias entre dos o más ramas a nivel de commit.
Este comando se utiliza en casi todos los capítulos del libro para mostrar la historia de un proyecto.
Introducimos el comando y lo cubrimos con cierta profundidad en Ver el Historial de Confirmaciones. Allí vemos las opciones -p
y --stat
para tener una idea de lo que fue introducido en cada commit y las opciones --pretty
y --oneline
para ver el historial de forma más concisa, junto con unas simples opciones de filtrado de fecha y autor.
En Crear una Rama Nueva lo utilizamos con la opción --decorate
para visualizar fácilmente donde se encuentran nuestros punteros de rama y también utilizamos la opción --graph
para ver la apariencia de las historias divergentes.
En Pequeño equipo privado y Rangos de Commits cubrimos la sintaxis branchA..branchB
al usar el comando git log
para ver que commits son únicos a una rama en relación a otra rama. En Rangos de Commits repasamos esto bastante extensamente.
En Registro de Fusión y Tres puntos cubrimos el uso del formato branchA...branchB
y la sintaxis --left-right
para ver que está en una rama o en la otra pero no en ambas. En Registro de Fusión también vemos como utilizar la opción --merge
para ayudarnos con la depuración de conflictos de fusión así como el uso de la opción --cc
para ver conflictos de fusión en tu historia.
En Nombres cortos de RefLog usamos la opción -g
para ver el reflog de Git a través de esta herramienta en lugar de hacer un recorrido de la rama.
En Buscando vemos el uso de las opciones -S
y -L
para hacer búsquedas bastante sofisticados de algo que sucedió históricamente en el código como ver la historia de una función.
En Firmando Commits vemos como usar --show-signature
para añadir una cadena de texto de validación a cada commit en la salida de git log
basado en si fue válidadmente firmado o no.
git stash
El comando git stash
se utiliza para almacenar temporalmente el trabajo no confirmado con el fin de limpiar el directorio de trabajo sin tener que confirmar el trabajo no acabado en una rama.
Básicamente esto es enteramente cubierto en Guardado rápido y Limpieza.
git tag
El comando git tag
se utiliza para dar un marcador permanente a un punto específico en el historial del código fuente. Generalmente esto se utiliza para cosas como las liberaciones (releases).
Este comando se introduce y se trata en detalle en Etiquetado y lo usamos en la práctica en Etiquetando tus versiones.
También cubrimos cómo crear una etiqueta con firma GPG tag con el indicador -s
y verificamos uno con el indicador -v
en Firmando tu trabajo.