git branch nombreCrea una rama nueva apuntando al commit actual (HEAD), pero
no cambia a ella. Sigue trabajándose en la rama anterior.
git switch nombreCambia el directorio de trabajo y HEAD a la rama indicada.
git switch -c nombreCrea la rama y cambia a ella en un solo paso. Equivalente al más
antiguo git checkout -b nombre.
git branchLista las ramas locales, marcando con un asterisco la rama actual.
git branch -d nombreElimina una rama, siempre que sus commits ya estén incorporados en
otra rama (protección contra pérdida accidental de trabajo). Con
-D se fuerza el borrado igualmente.
Una rama no tiene por qué partir del commit actual. Se le puede indicar explícitamente desde qué commit arrancar, usando cualquiera de las formas de referirse a un commit vistas en Referencias y el grafo de commits:
git branch nueva-rama a1b2c3d git branch nueva-rama HEAD~3 git branch nueva-rama v2.1.0
Esto crea nueva-rama apuntando exactamente a ese commit,
dejando HEAD donde estaba (en la rama actual). Para crearla y
cambiar a ella de inmediato:
git switch -c nueva-rama HEAD~3
Esto es especialmente útil para retomar el trabajo desde un punto anterior sin perder la rama actual: por ejemplo, si se descubre que un error se introdujo hace varios commits y conviene aislar la corrección a partir de ese punto exacto, en vez de partir desde la punta de la rama con todos los cambios posteriores incluidos.
git switch main git merge feature
git merge incorpora los commits de feature en la rama
actual (main). Según la situación, ocurre una de dos cosas:
Si main no tiene ningún commit propio desde que
feature se separó de ella, Git simplemente mueve el puntero
de main hasta el mismo commit que feature. No se crea
ningún commit de fusión nuevo; el historial queda lineal.
Si ambas ramas avanzaron por separado, Git crea un nuevo
commit de fusión con dos padres: la punta anterior de
main y la punta de feature. El tree de ese commit
combina los cambios de ambas ramas.
Un conflicto ocurre cuando ambas ramas modificaron las mismas líneas de un mismo archivo de formas distintas, y Git no puede decidir automáticamente cuál versión prevalece. En ese caso, Git detiene la fusión y marca los archivos en conflicto con marcadores dentro del propio archivo:
<<<<<<< HEAD versión de la rama actual ======= versión de la rama que se está fusionando >>>>>>> feature
Resolver el conflicto consiste en editar el archivo dejando el contenido correcto (que puede ser una de las dos versiones, una combinación, o algo distinto), quitar los marcadores, y luego:
git add archivo-resuelto.txt git commit
Git recuerda que se estaba en medio de una fusión y prepara
automáticamente el mensaje del commit de fusión al ejecutar
commit sin argumentos.
Para cancelar una fusión en curso y volver al estado anterior:
git merge --abort