Tengo una gran fusión con más de 300 archivos en conflicto. Quiero resolver esto usando mergetool, pero no hay forma de que termine todo de una vez. ¿Cómo puedo comprometer la fusión y luego volver más tarde y continuar la misma fusión? Normalmente parece que git no te permite comprometerte si hay conflictos en el índice.Cómo comprometer una fusión larga de Git en el medio de resolver conflictos
Respuesta
Supongo que por "no puedo hacerlo de una sola vez" en realidad quieres decir "quiero hacer otras cosas antes de terminar", ya que de lo contrario podrías dejar la fusión parcialmente resuelta en tu árbol de trabajo.
En primer lugar, antes de tener problemas, tenga en cuenta que simplemente podría crear otro clon del repositorio: la fusión parcialmente resuelta puede permanecer en uno, y puede hacer otro trabajo en otro.
Dicho todo esto, si realmente desea guardar el trabajo que ha realizado para resolver parcialmente una fusión, mi mejor sugerencia es usar git rerere
(REuse REsolutions reordenados).
Para comenzar, asegúrese de que rerere.enabled
esté configurado en verdadero, que cubrirá la mayoría de los casos de uso normal. Provoca que git rerere
se ejecute automáticamente inmediatamente después de que sucedan los conflictos de fusión; en ese momento, verá mensajes del formulario Recorded preimage for '<path>'
. También se ejecuta automáticamente cuando se compromete una combinación; luego verá los mensajes del formulario Recorded resolution for '<path>'.
. Las resoluciones se pueden reutilizar más adelante cuando aparezcan los mismos trozos en conflicto.
Ahora, en su caso de uso, se producirá el primer disparo automático: se grabarán las preimágenes. Pero no está listo para comprometer su fusión, por lo que después de resolver algunos archivos en conflicto y marcarlos como resueltos (agregándolos al índice) puede ejecutar git rerere
(sin argumentos) directamente. Grabará las resoluciones de todo lo que haya marcado como resuelto, pero ignorará lo que aún no se haya resuelto. A continuación, puede simplemente destruir el intento de fusión (git reset --merge
), y la próxima vez que lo intente, las resoluciones grabadas se reutilizarán.
Wow, eso es increíble. Quise decir que no quiero dejar un montón de cambios no comprometidos en mi máquina de desarrollo por días en caso de un desastre. Prefiero hacer los empujones regulares para la copia de seguridad como copia de seguridad y para que los colaboradores puede ver mi trabajo. Después de leer la página man, parece que los cambios 'rerere' se registran localmente. ¿Hay alguna forma de almacenarlos en una confirmación? Además, ¿tienes alguna idea de si puedo activar esto mientras estoy en en el medio de una combinación? –
@Reed: Hm. Va a ser complicado usar 'rerere' si aún no estaba habilitado; lo único que se me ocurre es volver a hacer la fusión en un clon y copiar las cosas ya lo has resuelto. Y como dices, es un almacenamiento local. Por proponer una fusión parcial en forma de compromiso ... honestamente, lo descartaría: volcar una lista de los conflictos no resueltos (de 'git status' o' git estado --porcelain', por ejemplo), luego agrega todo como si estuviera arreglado, y confírmalo, en el entendido de que ser enmendado más tarde antes de ser verdaderamente publicado. – Cascabel
@Reed: para que sea un poco menos complicado, puede comprometerse en dos pasos: resolver algunos conflictos, agregarlos y 'reiniciar HEAD 'todo lo demás. Luego, cuando te comprometas, estarás cometiendo una fusión con contenido resuelto únicamente, y todas las cosas no resueltas quedarán tal como estaban antes de la fusión. A continuación, puede agregar todas las cosas sin clasificar (previamente en conflicto) y confirmarlas como una segunda confirmación. Para trabajar en ello más adelante, puede verificar el segundo compromiso y hacer un restablecimiento mixto (al primer commit (fusión) ('git reset HEAD ^'), luego comenzar a trabajar de nuevo, sabiendo que todas las "modificaciones locales" fueron conflictos. – Cascabel
- 1. git submódulo fusión de conflictos: ¿cómo visualizar?
- 2. ¿Cómo resolver conflictos de fusión en Mercurial (v1.0.2)?
- 3. ¿Tengo que comprometer una fusión para hacer que git-rerere grabe mi resolución de conflicto?
- 4. cómo resolver conflictos de extracción de git en xcode ui
- 5. Aceptar todos los conflictos de fusión en git
- 6. Fusión sin conflictos de espacios en blanco
- 7. ¿Cómo resolver conflictos al fusionar y actualizar archivos en git?
- 8. git obtener conflictos de la fusión pasada sin ejecutar la fusión una vez más
- 9. Resolver conflictos pospuestos con SVN
- 10. git rebase resolver conflictos una y otra vez?
- 11. ¿Cómo combinar código y resolver conflictos más fácilmente usando git?
- 12. git reword sin resolver conflictos de combinación otra vez
- 13. Git: Cómo "deshacer" una fusión
- 14. Resolver conflictos utilizando cambios remotos al extraer desde el control remoto de Git
- 15. git: ¿Cómo obtener "nuestro, el suyo, original" para conflictos de fusión?
- 16. Resolviendo conflictos Git Svn
- 17. ¿Cómo verifico posibles conflictos de fusión/rebase en Mercurial?
- 18. ¿Cómo recupero mis conflictos de fusión de git después de fusionarlos incorrectamente?
- 19. ¿Cómo resuelve Git el problema de fusión?
- 20. Cómo usar git difftool para diferenciar conflictos?
- 21. Cómo detectar conflictos entre dos repositorios git.
- 22. Cómo resolver conflictos de árbol mediante el plugin svn Eclipse
- 23. git - cómo excluir archivos de la fusión
- 24. Git rebase una rama en el maestro falló, ¿cómo resolver?
- 25. git format-patch sin comprometer
- 26. ¿Cómo resolver automáticamente los conflictos de combinación seleccionando la versión remota en Git?
- 27. ¿Cómo resolver el conflicto de fusión del archivo xib?
- 28. Cómo deshacer "git add" durante una fusión?
- 29. Git comprometer ganchos por rama
- 30. deshacer la fusión de git después de merge.renameLimitar la advertencia más conflictos
Tampoco se puede esconder. :( –