Dice:
Cuando guarde y salga del editor, lo rebobinará hasta la última confirmación en esa lista y lo colocará en la línea de comando con el siguiente mensaje:
$ git rebase -i HEAD~3
Stopped at 7482e0d... updated the gemspec to hopefully work better
You can amend the commit now, with
No significa:
Escriba otra vez git rebase -i HEAD~3
Intente no escribir git rebase -i HEAD~3
al salir del editor, y debería funcionar bien.
(de lo contrario, en su situación particular, git rebase -i --abort
podría ser necesario restablecer todo y permitirle volver a intentarlo)
Como Dave Vogt menciona en los comentarios, git rebase --continue
es para pasar a la siguiente tarea en el proceso de rebase, después de haber modificado la primera confirmación .
Además, Gregg Lind menciona en su respuesta el reword
comando degit rebase
:
Al reemplazar el comando "escoger" con el comando "editar", puede decir git rebase
que se detenga después de aplicar esa confirmación, de modo que pueda editar los archivos y / o el mensaje de confirmación, modificar la confirmación y continuar el rebase.
Si solo desea editar el mensaje de confirmación para una confirmación, reemplace el comando " pick
" con el comando " reword
" , ya que Git1.6.6 (enero de 2010) .
Hace lo mismo ' edit
' durante un rebase interactivo, excepto que solo le permite editar el mensaje de confirmación sin devolver el control al shell . Esto es extremadamente útil.
Actualmente, si desea limpiar sus mensajes de confirmación, debe:
$ git rebase -i next
Luego configure todos los commits para 'editar'. Luego en cada uno:
# Change the message in your editor.
$ git commit --amend
$ git rebase --continue
Usar ' reword
' en lugar de ' edit
' le permite omitir las llamadas git-commit
ygit-rebase
.
git rebase --continue
pasa a la siguiente tarea en el proceso de rebase, después de haber modificado la primera confirmación.Como sugirió Gregg Lind, puede usar la nueva palabra para que se le solicite que solo cambie el mensaje de confirmación (y deje la confirmación intacta de lo contrario):
Aquí
n
está la lista de los últimos n commits.Por ejemplo, si usa
git rebase -i HEAD~4
, puede ver algo como esto:Ahora reemplace pick con reword para los commits de los que desea editar los mensajes:
Salga del editor después de guardar el archivo, y luego se le pedirá que edite los mensajes para las confirmaciones que había marcado como reword , en un archivo por mensaje. Tenga en cuenta que hubiera sido mucho más sencillo simplemente editar los mensajes de confirmación cuando reemplazado
pick
conreword
, pero haciendo que no tiene ningún efecto.Obtenga más información en la página de GitHub para Cambiar un mensaje de confirmación .
fuente
FWIW, git rebase interactive ahora tiene una opción de "reformulación", ¡lo que hace que esto sea mucho menos doloroso!
fuente
reword
, ¿por qué git simplemente no le permite editar los mensajes de confirmación en ese archivo con la lista de confirmaciones? En su lugar, iniciará el editor con un archivo de mensaje de confirmación porreword
línea. Esto es simplemente innecesario. Incluso si otras accionespick
oreword
requieren el lanzamiento de comandos externos,reword
no lo necesitarían.Solo quería proporcionar una opción diferente para esto. En mi caso, generalmente trabajo en mis sucursales individuales y luego me uno a master, y los compromisos individuales que hago con mi local no son tan importantes.
Debido a un gancho de git que verifica el número de boleto apropiado en Jira pero distingue entre mayúsculas y minúsculas, se me impidió presionar mi código. Además, el compromiso se realizó hace mucho tiempo y no quería contar cuántos compromisos volvería a la rebase.
Entonces, lo que hice fue crear una nueva rama desde el último maestro y aplastar todas las confirmaciones de la rama problemática en una sola confirmación en una nueva rama. Fue más fácil para mí y creo que es una buena idea tenerlo aquí como referencia futura.
Del último maestro:
Luego
Referencia: https://github.com/rotati/wiki/wiki/Git:-Combine-all-messy-commits-into-one-commit-before-merging-to-Master-branch
fuente
rebase -i
durante unas 2 horas y no tuve éxito. Mi commit estaba detrás de 18 commits, por lo que te puedes imaginar. Esta fue la forma más simple y práctica que pude encontrar sin necesidad de usar rebase. ¡Gracias amigo!Aquí hay una muy buena Gist que cubre todos los casos posibles: https://gist.github.com/nepsilon/156387acf9e1e72d48fa35c4fabef0b4
Visión general:
fuente