Tengo una rama de git (llamada v4), que se hizo desde el maestro ayer. Hubo un par de cambios para dominar, que quiero incluir en la v4. Entonces, en la v4, intenté hacer un rebase desde el maestro, y un archivo sigue arruinando las cosas: un archivo de texto de una línea, que contiene el número de versión. Este archivo es app/views/common/version.txt
, que antes de rebasar contiene este texto:
v1.4-alpha-02
Esto es lo que estoy haciendo:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
El version.txt
ahora se ve así:
<<<<<<< HEAD:app/views/common/version.txt
v1.4-alpha-02
=======
v1.4-alpha-01
>>>>>>> new version, new branch:app/views/common/version.txt
Entonces, lo ordeno y se ve así ahora:
v1.4-alpha-02
y luego traté de continuar: al principio intento un compromiso:
> git commit -a -m "merged"
# Not currently on any branch.
nothing to commit (working directory clean)
No hubo suerte ahí. Entonces, estaba tratando de agregar el archivo:
git add app/views/common/version.txt
Ninguna respuesta. No tener noticias es una buena noticia, supongo. Entonces, trato de continuar:
> git rebase --continue
Applying: new version, new branch
No changes - did you forget to use 'git add'?
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
Es en este punto, después de dar vueltas y vueltas con esto, que me golpeo la cabeza contra el escritorio.
¿Que está pasando aqui? ¿Qué estoy haciendo mal? ¿Alguien puede aclararme?
EDITAR - para unutbu
Cambié el archivo como sugirió y obtengo el mismo error:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
git rebase master
y dejas que falle ; 2) luego editaversion.txt
y lo hace como debería verse en ese punto, y guarda la edición; 3) entonces túgit add .../version.txt
; 4) ¡Entonces lo hacesgit rebase --continue
( no 'comprometes' )! Sirebase --continue
tiene éxito aquí, ya está comprometido (¡no es necesariogit commit
aquí!), Por lo que todo lo que queda por hacer esgit push
(si usa un repositorio remoto). Espero que esto ayude, si lo hice bien:)
, ¡salud!Respuestas:
Encontré un problema similar con una rebase. Mi problema se debió a que una de mis confirmaciones solo cambió un archivo y, al resolverlo, descarté el cambio introducido en esta confirmación. Pude resolver mi problema omitiendo el correspondiente commit (
git rebase --skip
).Puede reproducir este problema en un repositorio de prueba. Primero cree el repositorio.
Luego confirme el contenido original de
version.txt
en master.Crea la
v4
rama y cambia el contenido deversion.txt
.Regrese ay
master
cambie el contenido deversion.txt
para que haya un conflit durante el rebase.Vuelva a la
v4
rama e intente volver a establecer la base. Falla con un conflitversion.txt
como estaba planeado.Resolvemos el conflicto seleccionando el
master
contenido deversion.txt
. Agregamos el archivo e intentamos continuar con nuestro rebase.Fracasa ! Veamos qué cambios
git
creemos que hay en nuestro repositorio.Ah ah, no hay cambio. Si leíste en detalle el mensaje de error anterior,
git
comunícanoslo y recomendó su usogit rebase --skip
. Nos dijo: "Si no queda nada por poner en escena, es probable que algo más ya haya introducido los mismos cambios; es posible que desee omitir este parche". Así que simplemente saltamos el compromiso y la rebase se realiza correctamente.Advertencia : tenga en cuenta que
git rebase --skip
eliminará por completo la confirmación quegit
intentó reajustar. En nuestro caso, esto debería estar bien ya quegit
se queja de que es una confirmación vacía. Si cree que ha perdido los cambios una vez que se completa la rebase, puede usargit reflog
para obtener el ID de confirmación de su repositorio antes de la rebase, y usargit reset --hard
para que su depósito vuelva a ese estado (esta es otra operación destructiva).fuente
git rebase --skip
, solo se salta una única confirmación. Generalmente emito ungit status
antes de saltarme un compromiso para ver si estoy en esta situación.rebase --skip
:).git reflog purge
ogit reflog delete
aún puedas recuperar tus cambios usandogit reflog
. Intente verificar las diferentes confirmaciones a las que se hace referencia allí, una de ellas debería ser el estado de su árbol antes de comenzar el todogit rebase
.Citando desde aquí: http://wholemeal.co.nz/node/9
fuente
Ese mensaje de error es el resultado de su
git commit -a -m "merged"
. Si solo arregla el archivo, ejecútelogit add <file>
ygit rebase --continue
debería funcionar bien.git rebase --continue
está tratando de hacer una confirmación, pero encuentra que no hay cambios pendientes para confirmar (porque ya los comprometió).fuente
git add <file>
no resolverá el problema.git rebase --continue
todavía informaNo changes - did you forget to use 'git add'?
Cambie app / views / common / version.txt a
En este punto del rebase, recuerde que está resolviendo conflictos de fusión para mostrar la progresión de la rama no maestra .
Entonces, al rebasar de
a
el conflicto que está resolviendo está en cómo crear A * en la rama del tema.
Entonces, después de hacerlo
git rebase --abort
, los comandos deben serfuente
El comportamiento que está viendo no es el que esperaría de un rebase típico con solo este conflicto. Considere usar una rama separada para hacer este rebase (especialmente si ya ha enviado las confirmaciones de forma remota que está adelantando). Además,
git mergetool
puede ser útil para resolver conflictos y recordar emitir ungit add
.En este ejemplo mínimo, la rebase funciona como se esperaba. ¿Puede dar un ejemplo que muestre el comportamiento que está viendo?
fuente
Aquí tienes algunas ideas:
rm -rf .git/rebase-apply
fuente