tienes - resolver conflictos en github
Git rebase: continúa con las quejas incluso cuando se hayan resuelto todos los conflictos de combinación (6)
Acabo de tener este problema, y aunque creo que podría haber algunas causas, aquí está el mío ...
Tuve un gancho de precompilación de git que rechazó confirmaciones bajo ciertas condiciones. Esto está bien cuando se realiza manualmente, ya que mostrará la salida del gancho, y puedo corregirlo o elegir ignorarlo usando commit --no-verify.
El problema parece ser que cuando se rebase, rebase --continue también llamará al enganche (para comprometer la última serie de cambios). Pero rebase no mostrará la salida de enlace, solo verá que falló, y luego escupirá un error menos específico que dice ''Debes editar todos los conflictos de fusión y luego marcarlos como resueltos usando git add''
Para solucionarlo, realice una etapa de todos sus cambios, y en lugar de hacer ''git rebase --continuar'', pruebe con ''git commit''. Si sufre el mismo problema con el anzuelo, debería ver las razones por las que está fallando.
Curiosamente, aunque git rebase no muestra la salida de git hook, sí acepta un --no-verify para eludir los ganchos.
Estoy enfrentando un problema que no estoy seguro de cómo resolverlo.
Hice una rebase contra el maestro de mi sucursal:
git rebase master
y obtuve el siguiente error
First, rewinding head to replay your work on top of it...
Applying: checkstyled.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging AssetsLoader.java
CONFLICT (content): Merge conflict in AssetsLoader.java
Failed to merge in the changes.
Patch failed at 0001 checkstyled.
Así que fui a mi editor favorito, solucioné el conflicto de 1 línea, guardé el archivo e hice un estado de git y obtuve el siguiente resultado:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: PassengerContactHandler.java
#
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: AssetsLoader.java
#
Hice un git agregar AssetsLoader.java y un estado de git y obtuve lo siguiente:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: AssetsLoader.java
# modified: PassengerContactHandler.java
#
y cuando lo hice git rebase --continúe me sale:
git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
Sé que puedo omitir el parche y continuar la rebase, pero no estoy seguro de si los cambios en PassengerContactHandler.java se volverán a establecer en mi rama o no.
entonces no estoy seguro, ¿cómo debo proceder?
Editar: ¿Podría ser que el archivo con el conflicto resuelto sea exactamente igual a la versión original?
Muchas gracias, Lucas
Editar, me volvió a pasar:
Me acaba de pasar otra vez,
(307ac0d...)|REBASE)$ git status
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: assets/world/level1/Level-1.xml
# modified: George.java
# modified: DefaultPassenger.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# mb-art/originalAssets/27dec/
((307ac0d ...) | REBASE) $ git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
git --version
git version 1.7.1
Después de solucionar el conflicto, asegúrese de que los archivos modificados se agreguen a sus archivos por etapas. Esto resolvió mi problema.
Esto sucede porque, al solucionar un conflicto, eliminaste todo el código del parche aplicado a la rama en la que estás redistribuyendo. Use git rebase --skip
para continuar.
Un poco más detalles:
Normalmente, al arreglar un conflicto durante la rebase, editarás el archivo en conflicto, manteniendo parte o todo el código en el parche que se aplica actualmente a la rama en la que repostaste. Después de arreglar el parche y hacer
git add your/conflicted/file
git status
obtendrá una línea (generalmente verde) que muestra el archivo modificado
modified: su / conflicted / archivo
git rebase --continuará funcionará bien en esta situación.
A veces, sin embargo, al resolver el conflicto, eliminas todo en tu nuevo parche, manteniendo solo el código de la rama en la que reinicieste tu trabajo. Ahora cuando agregue el archivo, será exactamente igual al que intentó volver a establecer. El estado de git no mostrará una línea verde que muestre los archivos modificados. Ahora, si lo haces
git rebase --continue
git se quejará con
Sin cambios: ¿se olvidó de usar ''git add''?
Lo que Git realmente quiere que hagas en esta situación es usar
git rebase --skip
saltear el parche Anteriormente nunca hice esto, ya que siempre estaba seguro de lo que en realidad se saltaría si lo hiciera, no era obvio para mí lo que realmente significaba "omitir este parche". Pero si no obtienes una línea verde con
modified: su / conflicted / archivo
después de editar el archivo en conflicto, agregarlo y hacer el estado de git, entonces puede estar bastante seguro de haber eliminado todo el parche, y en su lugar puede usar
git rebase --skip
continuar.
La publicación original dice que esto a veces funciona:
git add -A git rebase --continue # works magically?
... pero no confíe en esto (y asegúrese de no agregar archivos sobrantes en sus carpetas de repositorio)
Intenta ejecutar esto en tu línea de comando:
$ git mergetool
Debe mostrar un editor interactivo que le permita resolver los conflictos. Es más fácil que tratar de hacerlo manualmente, y también reconocerá cuando hagas la fusión. También evitará situaciones en las que no se fusiona completamente por accidente que puede suceder cuando intenta hacerlo manualmente.
Te perdiste un conflicto de fusión en AssetsLoader.java. Ábrelo y busca marcadores de conflicto (">>>>", "====", "<<<<<") y luego vuelve a agregar git. Haga un ''git diff -staged'' si tiene dificultades para encontrarlo.
Parece ser un error en Git 1.7
Aquí hay un buen artículo sobre cómo resolver esto .
Básicamente debería funcionar, si haces una
git diff
después de resolver tus conflictos y luego
git rebase --continue
Deberia trabajar.