Los conflictos de fusión ocurren cuando se hacen cambios contrapuestos en la misma línea de un archivo o cuando una persona edita un archivo y otra persona borra el mismo archivo. Para más información, consulta Acerca de los conflictos de fusión.
Tip
Puedes usar el editor de conflictos de GitHub para resolver conflictos de fusión mediante combinación por cambios en líneas en competencia entre ramas que forman parte de una solicitud de cambios. Para más información, consulta Resolver un conflicto de fusión en GitHub.
Conflictos de fusión de cambios de líneas contrapuestos
Para resolver un conflicto de fusión causado por cambios de líneas contrapuestos, debes decidir qué cambios incorporar desde las diferentes ramas de una confirmación nueva.
Por ejemplo, si tú y otra persona habéis editado en el archivo styleguide.md
las mismas líneas de diferentes ramas del mismo repositorio de Git, recibirás un error de conflicto de fusión mediante combinación cuando intentes fusionar mediante combinación estas ramas. Debes resolver este conflicto de fusión con una confirmación nueva antes de que puedas fusionar estas ramas.
-
Abra TerminalTerminalGit Bash.
-
Navega en el repositorio de Git local que tiene el conflicto de fusión.
cd REPOSITORY-NAME
-
Genera una lista de los archivos afectados por el conflicto de fusión. En este ejemplo, el archivo styleguide.md tiene un conflicto de combinación.
$ git status > # On branch branch-b > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add <file>..." to mark resolution) > # > # both modified: styleguide.md > # > no changes added to commit (use "git add" and/or "git commit -a")
-
Abre tu editor de texto favorito, por ejemplo, Visual Studio Code, y dirígete al archivo que tiene conflictos de combinación.
-
Para ver el origen de un conflicto de combinación en el archivo, busque el marcador de conflicto
<<<<<<<
en el archivo. Al abrir el archivo en el editor de texto, verá los cambios de la rama HEAD o de base después de la línea<<<<<<< HEAD
. A continuación, verá=======
, que divide los cambios de los de la otra rama, seguido de>>>>>>> BRANCH-NAME
. En este ejemplo, una persona ha escrito "abrir una incidencia" en la rama HEAD o de base, y otra persona ha escrito "formula tu pregunta en IRC" en la rama comparada obranch-a
.If you have questions, please <<<<<<< HEAD open an issue ======= ask your question in IRC. >>>>>>> branch-a
-
Decide si quieres mantener únicamente los cambios de tu rama, mantener únicamente los cambios de las demás ramas, o hacer un cambio nuevo, el cual puede incorporar cambios de ambas ramas. Elimine los marcadores
<<<<<<<
,=======
y>>>>>>>
en conflicto, y realice los cambios deseados en la combinación final.En este ejemplo, ambos cambios se incorporaron en la fusión final:If you have questions, please open an issue or ask in our IRC channel if it's more urgent.
-
Agrega o lanza tus cambios.
git add .
-
Confirma tus cambios con un comentario.
git commit -m "Resolve merge conflict by incorporating both suggestions"
Ahora puede combinar las ramas en la línea de comandos, o bien insertar los cambios en el repositorio remoto en GitHub y combinar los cambios en una solicitud de incorporación de cambios.
Conflictos de fusión de archivos eliminados
Para resolver un conflicto de fusión causado por cambios contrapuestos en un archivo, cuando una persona elimina un archivo en una rama y otra persona edita el mismo archivo, debes decidir si eliminar o conservar el archivo eliminado en una confirmación nueva.
Por ejemplo, si ha editado un archivo, como README.md, y otra persona ha eliminado el mismo archivo en otra rama del mismo repositorio de Git, recibirá un error de conflicto de combinación cuando intente combinar estas ramas. Debes resolver este conflicto de fusión con una confirmación nueva antes de que puedas fusionar estas ramas.
-
Abra TerminalTerminalGit Bash.
-
Navega en el repositorio de Git local que tiene el conflicto de fusión.
cd REPOSITORY-NAME
-
Genera una lista de los archivos afectados por el conflicto de fusión. En este ejemplo, el archivo README.md tiene un conflicto de combinación.
$ git status > # On branch main > # Your branch and 'origin/main' have diverged, > # and have 1 and 2 different commits each, respectively. > # (use "git pull" to merge the remote branch into yours) > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add/rm <file>..." as appropriate to mark resolution) > # > # deleted by us: README.md > # > # no changes added to commit (use "git add" and/or "git commit -a")
-
Abre tu editor de texto favorito, por ejemplo, Visual Studio Code, y dirígete al archivo que tiene conflictos de combinación.
-
Decide si quieres conservar el archivo eliminado. Puede que quieras ver los últimos cambios hechos en el archivo eliminado en tu editor de texto.
Para volver a agregar el archivo eliminado a tu repositorio:
git add README.md
Para eliminar este archivo de tu repositorio:
$ git rm README.md > README.md: needs merge > rm 'README.md'
-
Confirma tus cambios con un comentario.
$ git commit -m "Resolve merge conflict by keeping README.md file" > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
Ahora puede combinar las ramas en la línea de comandos, o bien insertar los cambios en el repositorio remoto en GitHub y combinar los cambios en una solicitud de incorporación de cambios.