He leído la sección Básica de ramificación y fusión del Libro de la comunidad de Git.
Así lo sigo y crear una rama: experimental
.
Entonces yo:
- cambiar a rama experimental (git checkout experimental)
- hacer un montón de cambios
- comprometerlo (git commit -a)
- cambiar a rama maestra (git checkout master)
- hacer algunos cambios y comprometerse allí
- volver a experimental (git checkout experimental)
- cambiar maestro de fusión a experimental (maestro de fusión git)
hay algunos conflictos, pero después de resolverlos, 'agregué mi archivo'
Y ahora estoy atascado, no puedo volver a dominar
Cuando lo hago
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
y lo hice:
$ git rebase --abort
No hay rebase en progreso?
y lo hice :
$ git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
¿Qué puedo hacer para volver a mi rama maestra?
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
resultadofatal: cannot do a partial commit during a merge.
. Y, por supuesto, las "confirmaciones parciales" no parecen estar documentadas ni discutidas en ninguna parte de las páginas de manual de git. Realizar unagit merge
después de los resultados del arreglo enPlease, commit your changes before you can merge.
qué una herramienta culo roto ...git merge --continue
. Vea mi respuesta a continuaciónRespuestas:
Cuando hay un conflicto durante una fusión, debe finalizar la confirmación de fusión manualmente. Parece que has hecho los dos primeros pasos, para editar los archivos que estaban en conflicto y luego ejecutarlos
git add
para marcarlos como resueltos. Finalmente, necesita comprometer realmente la fusión congit commit
. En ese punto, podrá cambiar de rama nuevamente.fuente
git commit -am "your commit message"
realizar agregar y confirmar simultáneamente.git commit
funciona. Y es mejor usarlo para obtener el mensaje de confirmación de fusión predeterminado que se completa para usted.git push
.Con Git 2.12 (Q1 2017), tendrá el comando más natural:
Ver commit c7d227d (15 dic 2016) por Jeff King (
peff
) .Ver commit 042e290 , commit c261a87 , commit 367ff69 (14 de diciembre de 2016) por Chris Packham (
cpackham
) .(Fusionada por Junio C Hamano -
gitster
- en commit 05f6e1b , 27 dic 2016)Consulte las notas de la versión 2.12 .
fuente
En caso de que alguna vez te quedes atascado durante una fusión / rebase, siempre puedes
para restaurar su trabajo al estado de la última confirmación. Esto perderá sus cambios del árbol de trabajo, por lo que si tuvo modificaciones locales antes de la fusión, desaparecerán después de esto, por lo que es aconsejable no iniciar una fusión cuando tenga modificaciones locales. :)
fuente
git reset --hard
lanza cambios de distancia no comprometidosgit merge --abort
, que no tiene riesgo de perder nada?Solo
git commit
esoOpcionalmente
git abort
:me encontré con un conflicto de fusión. ¿Cómo puedo abortar la fusión?
Para hacer la vida más fácil con las fusiones, instale kdiff3 y configúrelo como una herramienta de fusión. Instrucciones: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
Esa página contiene este video: https://www.youtube.com/watch?v=Cc4xPp7Iuzo
fuente
Cada vez que fusiona dos ramas con el comando
git merge brancha branchb
, hay dos posibilidades:Una rama (digamos brancha) puede ser alcanzada por la otra rama (digamos branchb) siguiendo su historial de confirmaciones. En este caso, git simplemente avanza rápidamente la cabeza para señalar la rama reciente (en este caso branchb).
2. Pero si las dos ramas han divergido en algún punto anterior, git crea una nueva instantánea y agrega una nueva confirmación que apunta a ella. Entonces, en caso de que no haya conflicto entre las ramas que está fusionando, git crea sin problemas una nueva confirmación.
Ahora volviendo al caso interesante cuando hay conflictos de fusión entre las ramas de fusión. Cito esto de la página https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
Entonces, en caso de que haya conflictos de fusión, debe resolver el conflicto y luego agregar los cambios que ha realizado al área de preparación utilizando
git add filename
y luego confirmar los cambios utilizando el comandogit commit
que git detuvo debido al conflicto. Espero que esto explique su consulta. También visite el enlace de arriba para una comprensión detallada. En caso de cualquier consulta, por favor comente a continuación, estaré encantado de ayudarlo.fuente
Los siguientes pasos después de resolver los conflictos manualmente son: -
git merge --continue
,git cherry-pick --continue
,git rebase --continue
]fuente
error: Failed to merge in the changes. Patch failed at 0001 ADD: _type to styleguide The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
git merge --continue
, que es lo que estoy tratando de hacer, da como resultadoerror: unknown option 'continue'
. Estoy seguro de que su respuesta es incorrecta, ya que lagit-merge
página del manual no la incluye. ¿Qué versión de Git estás usando? Estoy usandogit version 1.8.5.2 (Apple Git-48)
. También probé con MacPortsgit version 2.9.3
.git commit
Un conflicto de fusión ocurre cuando dos ramas que está intentando fusionar cambian la misma parte del mismo archivo. Puede generar una lista de conflictos con
git status
.Cuando se encuentra la línea en conflicto, Git editará el contenido de los archivos afectados con indicadores visuales que marcan ambos lados del contenido en conflicto.
Cuando arregle sus archivos en conflicto y esté listo para fusionar, todo lo que tiene que hacer es ejecutar
git add
ygit commit
generar la confirmación de fusión. Una vez que se realizó la confirmación,git push
los cambios a la rama.Artículo de referencia: Git merge .
fuente
Después de agregar todos los archivos, el siguiente paso es un " git commit ".
"git status" sugerirá qué hacer: los archivos que aún no se han agregado se enumeran en la parte inferior, y una vez que estén listos, sugerirán una confirmación en la parte superior, donde explica el estado de fusión de la rama actual.
fuente
Lo primero que quiero dejar en claro es que los nombres de las ramas son solo un alias para una confirmación específica. un commit es lo que funciona git, cuando tiras, presionas fusionar y así sucesivamente. Cada confirmación tiene una identificación única.
Cuando haces la fusión $ git, lo que realmente está sucediendo es que git intenta adelantar tu rama actual al commit en el que está activada la rama referenciada (en otras palabras, ambos nombres de rama apuntan al mismo commit). Este escenario es el más fácil para git para tratar, ya que no hay nuevo compromiso. Piensa en el maestro saltando sobre el lilipad en el que se relaja tu rama. Es posible establecer el indicador --no-ff, en cuyo caso git creará una nueva confirmación independientemente de si hubo algún conflicto de código.
En una situación en la que hay conflictos de código entre las dos ramas que está intentando fusionar (generalmente dos ramas cuyo historial de compromisos comparten un compromiso común en el pasado), el avance rápido no funcionará. Es posible que git pueda fusionar automáticamente los archivos, siempre que ambas ramas no hayan cambiado la misma línea en un archivo en conflicto. en este caso, git fusionará los archivos en conflicto por usted Y los confirmará automáticamente. Puede obtener una vista previa de cómo git haciendo $ git diff --cached. O puede pasar el indicador --no-commit al comando merge, que dejará los archivos modificados en su índice que necesitará agregar y confirmar. Pero puede $ git diff estos archivos para revisar qué cambiará la fusión.
El tercer escenario es cuando hay conflictos que git no puede resolver automáticamente. En este caso, deberá fusionarlos manualmente. En mi opinión, esto es más fácil de hacer con una fusión tomada, como araxis merge o p4merge (gratis). De cualquier manera, debe hacer cada archivo uno por uno. Si la fusión parece estar atascada, use $ git merge --continue, para empujarla. Git debería decirte si no puede continuar, y si es así, ¿por qué no? Si en algún momento sientes que has desarmado la fusión, puedes hacer $ git merge --abort, y cualquier fusión se deshará y podrás comenzar de nuevo. Cuando haya terminado, cada archivo que fusionó será un archivo modificado que debe agregarse y confirmarse. Puede verificar dónde están los archivos con el estado $ git. Si aún no ha confirmado los archivos combinados. Debe hacer eso para completar la fusión.
fuente
Puede ser tarde Sucede porque su git HEAD no está actualizado. este elogio resolvería eso
git reset HEAD
.fuente