Resolver conflictos de fusión de Git a favor de sus cambios durante una extracción
¿Cómo resuelvo un conflicto de git merge a favor de cambios realizados?
Quiero eliminar todos los cambios conflictivos de un árbol de trabajo sin tener que revisar todos los conflictos git mergetool
y manteniendo todos los cambios libres de conflictos. Preferiblemente quiero hacer esto mientras tiro, no después.
git pull -s recursive -X theirs <remoterepo or other repo>
O, simplemente, para el repositorio predeterminado:
git pull -X theirs
Si ya estás en un estado de conflicto...
git checkout --ours path/to/file
Tenga en cuenta que durante
git rebase
ygit pull --rebase
, los nuestros y los de ellos pueden aparecer intercambiados;--ours
proporciona la versión de la rama en la que se rebasan los cambios, mientras que--theirs
proporciona la versión de la rama que contiene el trabajo que se está rebasando.git checkout
documentos
Puede utilizar la opción de estrategia recursiva "de ellos" :
git merge --strategy-option theirs
Del hombre :
ours
This option forces conflicting hunks to be auto-resolved cleanly by
favoring our version. Changes from the other tree that do not
conflict with our side are reflected to the merge result.
This should not be confused with the ours merge strategy, which does
not even look at what the other tree contains at all. It discards
everything the other tree did, declaring our history contains all that
happened in it.
theirs
This is opposite of ours.
Nota: como dice la página de manual, la opción de estrategia de fusión "nuestra" es muy diferente de la estrategia de fusión "nuestra" .
Si ya estás en un estado de conflicto y simplemente quieres aceptar todos los de ellos:
git checkout --theirs .
git add .
Si quieres hacer lo contrario:
git checkout --ours .
git add .
Esto es bastante drástico, así que asegúrate de querer borrar todo así antes de hacerlo.
Bien, imagina el escenario en el que me encontraba:
Intentas un merge
, o tal vez un cherry-pick
, y te detienes con
$ git cherry-pick 1023e24
error: could not apply 1023e24... [Commit Message]
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
Ahora, ve el archivo en conflicto y realmente no desea conservar los cambios. En mi caso anterior, el archivo entró en conflicto solo con una nueva línea que mi IDE había agregado automáticamente. Para deshacer sus cambios y aceptar los de ellos, la forma más sencilla es:
git checkout --theirs path/to/the/conflicted_file.php
git add path/to/the/conflicted_file.php
Lo contrario de esto (sobrescribir la versión entrante con su versión) es
git checkout --ours path/to/the/conflicted_file.php
git add path/to/the/conflicted_file.php
Sorprendentemente, no pude encontrar esta respuesta muy fácilmente en la Red.