Corrí un git pull
que terminó en un conflicto. Resolví el conflicto y todo está bien ahora (también utilicé mergetool).
Cuando confirmo el archivo resuelto aparece git commit file.php -m "message"
el error:
fatal: cannot do a partial commit during a merge.
Tuve el mismo problema antes y usar -a
en commit funcionó perfectamente. Creo que no es la forma perfecta porque no quiero comprometer todos los cambios. Quiero comprometer archivos por separado con comentarios separados. ¿Cómo puedo hacer eso? ¿Por qué git no permite a los usuarios confirmar archivos por separado después de una fusión? No pude encontrar una respuesta satisfactoria a este problema.
Respuestas:
Descubrí que agregar "-i" al comando commit me soluciona este problema. El -i básicamente le dice que organice archivos adicionales antes de comprometerse. Es decir:
fuente
Stage additional files
significagit add
, lo que hace quegit commit
falle. Agregar-i
le diría a git que agregue y confirme al mismo tiempo. Todavía no estoy seguro de por qué, pero parece tener sentido.Esto funcionó para mí. Puedes probar esto también.
fuente
Puede usar
git commit -i
para la mayoría de los casos, pero en caso de que no funcioneQue tiene que hacer
git commit -m "your_merge_message"
. Durante un conflicto de fusión, no puede fusionar un solo archivo, por lo que debegit add your_file.txt
)git commit -m "your_merge_message"
fuente
Probablemente tienes un conflicto en algo que no has puesto en escena para cometer. git no le permitirá cometer cosas de forma independiente (porque es parte de la fusión, supongo), por lo que necesita
git add
ese archivo y luegogit commit -m "Merge conflict resolution"
. La-i
bandera degit commit
hace el complemento para usted.fuente
commit -i
funcionó, pero nogit add; git commit
Obtuve esto cuando olvidé el
-m
compromiso de mi git al resolver un conflicto de fusión de git.debiera ser
fuente
Como dice el mensaje de error, no puede realizar una confirmación parcial después de una fusión. En lugar de comprometerse, solo
file.php
debe cometer todos los cambios.Esto debería funcionar.
fuente
Tu fusión se detuvo en medio de la acción. Debe agregar sus archivos y luego 'git commit':
git add file_1.php file_2.php file_3.php git commit
Salud
fuente
Si solo desea deshacerse de todos los archivos de selección de cerezas y confirmación en los conjuntos que desee,
te lleva allí.
Lo que hace el reinicio por software es que mueve el puntero que apunta al HEAD actual al commit (ish) que proporcionó pero no altera los archivos. El restablecimiento completo movería el puntero y también revertiría todos los archivos al estado en ese commit (ish). Esto significa que con el reinicio por software puede borrar el estado de fusión pero mantener los cambios en los archivos reales y luego confirmarlos o reiniciarlos individualmente según su gusto.
fuente
fuente
Para mí, esto sucedió en SourceTree cuando intenté realizar una fusión antes de resolver todos los archivos. Luego marqué el último archivo resuelto y aún así me dio este error al intentar confirmar. Cerré SourceTree y lo volví a abrir, y luego se comprometió bien.
fuente
Resolví esto con un enfoque completamente diferente, usando solo el control de código fuente de Xcode.
Antecedentes: otro equipo introdujo cambios en el repositorio remoto de Git (a través de Beanstalk). Por mi parte, los archivos .xcodeproj entraron en un directorio diferente, y los cambios no tomaron. Más tarde, cuando intenté comprometerme, recibí un error de Conflicto de árbol en Xcode.
Siendo casi imposible de corregir usando Xcode, reemplacé el
.xcodeproj
archivo con una versión descargada del servidor Git. El resultado ... el proyecto Xcode parecía aclararse, sin embargo, todas las actualizaciones del corrupto Pull aparecían como cambios que hice y se organizaron para un commit.Sin embargo, cuando traté de comprometerme, recibí el mismo error "fatal: no puedo hacer una confirmación parcial durante una fusión", discutido aquí.
Así es como resolví el problema ... (Ahora, entiendo que soy un programador novato, por lo que podría faltar algo de comprensión ... pero mi ignorancia me llevó a encontrar otra forma de hacer esto). Primero, cloné a mi maestro Se bifurca en una rama secundaria y se cambia a esa rama. Luego creé una Copia de trabajo y coloqué el directorio en esa copia de trabajo fuera del directorio original del proyecto. (No sé si esto era necesario, pero es lo que hice cuando leí otras técnicas de solución de problemas). Luego cambié las ramas al maestro, donde me di cuenta de que todos mis archivos por etapas (cambios en commit) habían desaparecido. Para asegurarme de que todos los archivos se actualizaron a los últimos cambios realizados por la otra parte, creé una nueva rama llamada ThirdBranch, que duplicaba todos los archivos, Lo introduje en el servidor Git y dejé que Beanstalk compare la versión de mi servidor de la rama maestra con la rama de ThirdBrach que acabo de empujar (línea por línea), y todos los cambios realizados por la otra parte estaban presentes en mi Xcode. Esto significaba que mi repositorio principal y el repositorio principal de Git eran los mismos, lo que verifica que resolví el problema usando Xcode solamente.
No me preguntes cómo, más allá de lo que acabo de describir ... y ciertamente llena los vacíos que dejé fuera. Soy nuevo en esto y no entiendo todo. Tal vez un programador experimentado pueda separar la información irrelevante de la relevante y recrear esta técnica más claramente, lo que es en parte por lo que publico esto.
Esta es una respuesta duplicada a una pregunta duplicada como en: Error en Xcode Git Merge está atascado
fuente
Durante una fusión, Git quiere realizar un seguimiento de las ramas principales por todo tipo de razones. Lo que quieres hacer no es una fusión como lo ve git. Es probable que desee hacer un rebase o selección de cereza manualmente.
fuente
git commit -i -m 'merge message'
No funcionó para mí. Decía:fatal: No paths with --include/--only does not make sense.
FWIW, llegué aquí a través de esta pregunta relacionada porque recibía este mensaje:
fatal: You have not concluded your merge (MERGE_HEAD exists).
También probé mergetool, que dijo
No files need merging
. ¡Muy confuso! ¿Entonces el MERGE_HEAD no está en un archivo que necesita fusionarse?Finalmente, usé este truco para agregar solo los archivos modificados (no quería agregar todos los archivos en mi árbol, ya que tengo algunos que quiero mantener sin seguimiento):
git ls-files -m | xargs git add
Entonces finalmente pude (!) Comprometerme y empujar hacia arriba. Seguro que sería bueno si git te diera mejores pistas sobre qué hacer en estas situaciones.
fuente
Si está en el Árbol de origen , debemos marcar explícitamente un archivo como resuelto después de que se resuelvan los conflictos. Seleccione el archivo que acaba de resolverse sin conflictos. Luego Acciones -> Resolver conflictos -> Marcar resuelto . Si tiene varios archivos, haga lo mismo para todos. Comprométete ahora.
fuente
Después de leer todos los comentarios. esta fue mi resolución:
tuve que "Agregar" nuevamente que cometer:
fuente
Si está utilizando el árbol de fuentes u otra GUI, asegúrese de que todos los archivos estén marcados (después de la fusión).
fuente
A veces, durante la fusión, si surgen conflictos y hay deltas que necesitan resolución manual. En tal caso, arregle la resolución manual de los archivos mencionados.
Ahora si emites,
Verá salida como
Como ya organizaste el commit, solo necesitas emitir
Y su compromiso se realizará sin ningún problema.
fuente