solucionar - git-El mismo archivo agregado por ambas ramas causa un conflicto de fusión extraño
resolver conflictos git pull (3)
Actualmente tengo dos sucursales en las que estoy trabajando. Debido a una actualización de software tuve que cambiar completamente la estructura de la carpeta. Por eso muevo los archivos en ambas ramas. Ahora llegué a un punto en el que quiero unir mi rama de trabajo con mi rama principal.
El problema es que hay conflictos de combinación que me dicen que solo una rama added by them
un archivo ( added by them
o added by us
). El problema es que el archivo ha sido agregado por ambas ramas.
Por ejemplo, tengo una textura en textures/texture1.png
. La rama maestra simplemente la movió a la ubicación correcta (antes de misc/textures/texture1.png
). La rama de trabajo lo movió exactamente a la misma ubicación y luego lo editó. El conflicto de fusión para este archivo dice:
added by us: textures/texture1.png
El punto es que este no es el archivo que quiero! Quiero el archivo de la otra rama!
Cuando lo hago
git checkout --theirs textures/texture1.png
yo obtengo
error: path ''textures/texture1.png'' does not have their veresion
Pero este archivo existe! Lo agregué recientemente! Y ese es el archivo que quiero.
¿Cómo resuelvo estos conflictos?
(mas informacion si es necesario!)
Mientras resuelve los conflictos, use git checkout
indicando el árbol correcto (nombre de rama, etiqueta, sha1 de la confirmación ...) desde donde desea obtener un archivo:
git checkout theirBranchYouAreMerging -- textures/texture1.png
Si no desea todos los cambios "su", puede cancelarlos parcialmente. Para eso necesitarías git reset -p
para eliminar selectivamente cualquier cambio no deseado del índice, y luego git checkout
para eliminarlos del directorio de trabajo también:
git checkout theirBranch -- some/file.txt
git reset -p -- some/file.txt
git checkout -- some/file.txt
Siempre puedes intentar
git mergetool
esto abrirá una GUI, donde puede elegir los cambios deseados haciendo clic en los enlaces correspondientes. A veces hay que hacer cambios manuales. Pero en tu caso solo tienes que seleccionar una imagen de archivo.
a--b--c--M--d--f--E--g--h--i <<< master
/
/
x--M''--y--z <<< you
¿Su situación se parece a la de arriba (donde M y M ''son los movimientos de confirmación y E es el compromiso que edita las texturas)? intenta fusionar z / i y git no es realmente feliz.
puede intentar fusionar M con M ''en una rama temporal
a--b--c---M--d--f--E--g--h--i <<< master
/ /
/ X <<< helper
/ /
x--M''--y--z <<< you
y luego fusione el ayudante ("X") con usted ("z") y el maestro ("i").
a--b--c---M--d--f--E--g--h--i <<< master
/ / /
/ X-----XX---------XXX <<< helper
/ / /
x--M''--y--z <<< you
De esa manera, los conflictos se resuelven directamente después de que se crean y no se llevan. A menudo esto es más fácil porque los conflictos tienden a crecer con el tiempo.