Cachorro
He estado haciendo una rebase. Trabajé para solucionar algunos conflictos, pero terminé yendo en la dirección equivocada y ahora solo quiero comenzar de nuevo a solucionar estos conflictos.
Me gustaría restablecer la base, de modo que sigo reorganizando la confirmación actual, pero la copia de trabajo se ha restablecido cuando la confirmación se marcó con conflictos en primer lugar.
¿Cómo puedo restablecer una rebase en el compromiso actual?
Ravi Shrivastava
Si estás entre tu rebase, puedes hacer
git rebase --abort
-
Eso abortaría todo el rebase, en lugar de solo rebasar este compromiso.
– Cachorro
8 de febrero de 2016 a las 10:18
alextercete
Si solo desea rehacer una fusión para un archivo específico, todo lo que necesita hacer es:
git checkout -m <file>
Si desea rehacer todo el compromiso, así es como lo hago (probablemente haya una mejor manera de hacerlo):
- Hay un conflicto durante el rebase
- Me equivoco en la resolución de conflictos
-
corro un
git status
que, a partir de Git 2.0.0, me da algo como esto (solo si estás haciendo un rebase interactivo):interactive rebase in progress; onto 14ed389 Last command done (1 command done): pick db2511c Modify file Next command to do (1 remaining command): pick d1c2037 Modify file one more time (use "git rebase --edit-todo" to view and edit) You are currently rebasing branch 'other' on '14ed389'. (fix conflicts and then run "git rebase --continue") (use "git rebase --skip" to skip this patch) (use "git rebase --abort" to check out the original branch) Unmerged paths: (use "git reset HEAD <file>..." to unstage) (use "git add <file>..." to mark resolution) both modified: file.txt
- Copio la línea del comando que se está ejecutando actualmente en la rebase:
pick db2511c Modify file
- Corro
git rebase --edit-todo
y pegue la línea en la parte superior del archivo - Corro
git rebase --skip
Pierre-Luc Carmel Biron
Primero, limpia el desorden:
git reset --hard HEAD
Luego, seleccione la confirmación que está reorganizando actualmente:
git cherry-pick -n `git rev-parse REBASE_HEAD`
Eso es. Como de costumbre, podrá continuar con la reorganización después de solucionar los conflictos.
-
Básicamente, esto te permite reiniciar la etapa de rebase actual, ¡increíble!
– Mitchell Mc Kenna
22 abr 2021 a las 0:30
Si hace esto a menudo (como yo 😅), puede crear un alias de git útil (basado en la elegante respuesta de Pierre)
[alias]
# Restart the current rebase step if you accidentally messed it up
# SEE: https://stackoverflow.com/a/53141807/625710
restart-rebase-step = !git reset --hard HEAD && git cherry-pick -n `git rev-parse REBASE_HEAD`
Luego puede llamarlo desde la línea de comando:
git restart-rebase-step
Si ha tenido varias confirmaciones editando los mismos archivos en ambas ramas y, durante la reorganización, decidió que desea conservar algo de trabajo, no elimine todos los cambios ya realizados (git rebase --abort
) entonces supongo que tendrás que buscar en el directorio .git/rebase-apply
y comprobar patch
expediente. Contiene todos los cambios realizados durante el rebase. Aplicaría manualmente este parche después de hacer git rebase --abort
.
Felipe C.S.
Para usar la resolución elstgav sin el alias, primero reinicie:
git reset --hard HEAD
Luego obtenga el SHA1 de la rebase:
rev-parse REBASE_HEAD
b10b228e263dfa223221036fa17506445a101f0f // this is the SHA1 value
Después de eso, use el valor SHA1 con el cherry-pick
dominio:
git cherry-pick -n b10b228e263dfa223221036fa17506445a101f0f