Estoy enfrentando un problema que no estoy seguro de cómo resolver.
Hice una rebase contra el maestro de mi rama:
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, arreglé 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 add 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 hice git rebase, continúo obteniendo:
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 con la reorganización, pero no estoy seguro de si los cambios en PassengerContactHandler.java se reorganizarán en mi rama o no.
así que no estoy seguro, ¿cómo debo proceder?
Editar: ¿Podría ser que el archivo con el conflicto resuelto sea exactamente como la versión original?
Muchas gracias lucas
Editar, me acaba de pasar de nuevo:
Me acaba de pasar de nuevo
(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 --continuar
You must edit all merge conflicts and then
mark them as resolved using git add
git --version
git version 1.7.1
git status
, ¿verdad? ¿No falta una sección debajo?git-rebase
Nunca debe informar que hay conflictos sin resolver si no los hay. Si puede lograr reproducir el problema en un caso de prueba más simple, sería mucho más fácil de depurar, pero aún así, si nogit status
informa ningún conflicto cuando logit rebase --continue
hace, y su versión de Git es actual, puede intentar enviar un correo electrónico al desarrollador de Git. lista de correo en [email protected] con toda la información de diagnóstico que pueda obtener.Respuestas:
Esto sucede porque al solucionar un conflicto, eliminó todo el código del parche que se estaba aplicando a la rama en la que está reajustando. Use
git rebase --skip
para continuar.Un poco más de detalles:
Normalmente, cuando se soluciona un conflicto durante el rebase, editará el archivo en conflicto, manteniendo parte o todo el código del parche que se está aplicando actualmente a la rama en la que rebase. Después de arreglar el parche y hacer
obtendrá una línea (generalmente verde) que muestra el archivo modificado
git rebase --continue funcionará bien en esta situación.
A veces, sin embargo, al resolver el conflicto, elimina todo en su nuevo parche, conservando solo el código de la rama en la que se basó. Ahora, cuando agregue el archivo, será exactamente como en el que intentó reajustar. git status no mostrará una línea verde que muestre los archivos modificados. Ahora, si lo haces
git se quejará con
Lo que git realmente quiere que hagas en esta situación es usar
para omitir el parche. Anteriormente nunca hice esto, ya que siempre no estaba seguro de qué se omitirí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
después de editar el archivo en conflicto, agregarlo y hacer el estado de git, puede estar bastante seguro de que eliminó todo el parche y, en su lugar, puede usar
continuar.
... pero no confíe en esto (y asegúrese de no agregar archivos sobrantes en las carpetas de su repositorio)
fuente
git add ...
se vuelve realmente molesto escribir después de cambiar un montón de archivos con rutas largas. ¿Hay ungit add --all-the-files-i-changed
que pueda ejecutar antesgit rebase continue
?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 un
después de resolver sus conflictos y luego
Deberia trabajar.
fuente
Recibí esta advertencia cuando tenía archivos sin preparar. Asegúrese de no tener ningún archivo sin preparar. Si no desea que los archivos sin etapas cambien, descarte los cambios con
fuente
Intente ejecutar esto en su línea de comando:
Debería abrir un editor interactivo que le permita resolver los conflictos. Más fácil que intentar hacerlo manualmente, y también git reconocerá cuando realice la combinación. También evitará situaciones en las que no se fusiona completamente por accidente, lo que puede ocurrir cuando intenta hacerlo manualmente.
fuente
Después de solucionar el conflicto, asegúrese de que los archivos modificados se agreguen a sus archivos almacenados. Esto resolvió mi problema.
fuente
Te perdiste un conflicto de fusión en AssetsLoader.java. Ábrelo y busca marcadores de conflicto (">>>>", "====", "<<<<<") y luego haz git add nuevamente. Haz un 'git diff --staged' si tienes dificultades para encontrarlo.
fuente
git diff --staged
Revela algo útil? Esto indica qué cambios está a punto de realizar para resolver los conflictos de fusión en este punto del rebase. Debería haber un "Ups, eso no es lo que pretendía hacer para resolver este" bit en uno de los archivos.git add
un archivo incluso con marcadores de conflicto. Después de todo, ¡estos archivos pueden ser perfectamente legales!Acabo de tener este problema, y aunque creo que puede haber algunas causas, aquí está la mía ...
Tenía un gancho de confirmación previa de git que rechazaba las confirmaciones bajo ciertas condiciones. Esto está bien cuando se confirma manualmente, ya que mostrará la salida del gancho, y puedo arreglarlo o elegir ignorarlo usando commit --no-verify.
El problema parece ser que al rebasar, rebase --continue también llamará al gancho (para realizar la última serie de cambios). Pero rebase no mostrará la salida del gancho, solo verá que falló y luego escupirá un error menos específico que dice 'Debe editar todos los conflictos de fusión y luego marcarlos como resueltos usando git add'
Para solucionarlo, organice todos sus cambios y, en lugar de hacer 'git rebase --continue', intente un 'git commit'. Si sufre el mismo problema de gancho, debería ver las razones por las que falla.
Curiosamente, aunque git rebase no muestra la salida de git hook, acepta un --no-verify para omitir los hooks.
fuente
git rebase
acepta la--no-verify
opción. Sin embargo, solo omite elpre-rebase
gancho, pero esta opción no se aplica en las siguientes llamadas agit commit
.Acabo de tropezar con el problema. No lo haría
git rebase --skip
porquegit status
mostraría claramente las modificaciones escalonadas, que quería mantener. Aunque tuve algunos archivos adicionales que llegaron inesperadamente. Resolví conpara eliminar las modificaciones no etiquetadas, luego
git rebase --continue
tuvo éxito.fuente
Una vez que haya corregido los cambios, es posible que olvide ejecutar 'git add -A'
fuente