Resolver un conflicto de fusión con la línea de comando
Puedes resolver conflictos de fusión con la línea de comando y un editor de texto.
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 obtener más información, consulta "Acerca de los conflictos de fusión".
Sugerencia: Puedes utilizar el editor de conflictos en GitHub Enterprise para resolver conflictos de fusión de cambios de líneas contrapuestos entre ramas que son parte de una solicitud de extracción. Para obtener 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 usted y otra persona editaron el archivo styleguide.md en las mismas líneas de diferentes ramas del mismo repositorio de Git, recibirás un error de conflicto de fusión cuando trates de fusionar estas ramas. Debes resolver este conflicto de fusión con una confirmación nueva antes de que puedas fusionar estas ramas.
-
Abre el terminal 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. In this example, the file styleguide.md has a merge conflict.
$ git status > # On branch branch-b > # You have unmerged paths. > # (fix conflicts and run "git commit") > # > # Unmerged paths: > # (use "git add
..." 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 preferido, como Atom, y navega hasta el archivo que tiene los conflictos de fusión.
-
To see the beginning of the merge conflict in your file, search the file for the conflict marker
<<<<<<<
. When you open the file in your text editor, you'll see the changes from the HEAD or base branch after the line<<<<<<< HEAD
. Next, you'll see=======
, which divides your changes from the changes in the other branch, followed by>>>>>>> BRANCH-NAME
. In this example, one person wrote "open an issue" in the base or HEAD branch and another person wrote "ask your question in IRC" in the compare branch orbranch-a
.If you have questions, please <<<<<<< HEAD open an issue ======= ask your question in IRC. >>>>>>> branch-a
-
Decide si deseas conservar solo los cambios de tu rama, conservar solo los cambios de otra rama o realizar un nuevo cambio en una rama, que pueda incorporar los cambios de ambas ramas. Elimina los marcadores de conflicto
<<<<<<<
,=======
,>>>>>>>
y realiza los cambios que deseas en la fusión final. In this example, both changes are incorporated into the final merge:Si tienes preguntas, abre una propuesta o consulta en nuestro canal IRC si es más urgente.
-
Agrega o almacena tus cambios.
$ git add .
-
Confirma tus cambios con un comentario.
$ git commit -m "Conflicto de fusión resuelto incorporando ambas sugerencias".
Ahora puedes fusionar las ramas en la línea de comando o subir tus cambios a tu repositorio remoto en GitHub Enterprise y fusionar tus cambios en una solicitud de extracción.
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 editaste un archivo, como README.md, y otra persona eliminó el mismo archivo en otra rama del mismo repositorio de Git, recibirás un error de conflicto de fusión cuando trates de fusionar estas ramas. Debes resolver este conflicto de fusión con una confirmación nueva antes de que puedas fusionar estas ramas.
-
Abre el terminal 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 fusión.
$ git status > # En la rama principal > # Tu rama y 'origin/master' se han desviado, > # y cada una tiene 1 y 2 confirmaciones diferentes, respectivamente. > # (utiliza "git pull" para fusionar tu rama remoto con la tuya) > # Tienes rutas sin fusionar. > # (corrige conflictos y ejecuta "git commit") > # > # Rutas sin fusionar: > # (utiliza "git add/rm
..." como adecuado para marcar resolución) > # > # eliminado por nosotros: README.md > # > # no se agregaron cambios a la confirmación (utiliza "git add" o "git commit -a") -
Abre tu editor de texto preferido, como Atom, y navega hasta el archivo que tiene los conflictos de fusió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 "Resolved merge conflict by keeping README.md file." > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
Ahora puedes fusionar las ramas en la línea de comando o subir tus cambios a tu repositorio remoto en GitHub Enterprise y fusionar tus cambios en una solicitud de extracción.