Git: cancela una rebase interactiva

Me gusta git rebase -i HEAD~5 a git rebase -i HEAD~5 para aplastar mis compromisos. A veces creo que necesito volver a 5 commits pero luego me doy count de que necesito 7. Sin embargo, git ya ha mostrado el editor de rebase .git/rebase-merge/git-rebase-todo en vim.

Si salgo de ese búfer (vim), entonces git dice:

 Successfully rebased and updated refs/heads/my-branchname 

¿Hay alguna manera de detener la rebase desde w / en el editor? Supongo que podría git rebase --abort de git rebase --abort de otro shell pero no estoy seguro de qué haría con el file git-rebase-todo que estaría editando en otro buffer.

Si se encuentra en la window inicial del editor de rebase interactivo que se ve así:

 pick f7f3f6d changed my name a bit pick 310154e updated README formatting and added blame pick a5f4a0d added cat-file # Rebase 710f0f8..a5f4a0d onto 710f0f8 ... ... # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. 

puede cancelar la rebase eliminando todo el contenido de la window del editor y guardándolo, o haciendo que el editor se cierre con un código de error.

En vim esto se puede lograr con d SHIFT+g seguido de :wq , o alternativamente haciendo que el editor salga con un error como señaló Mike HR usando :cq .

Si ya ha salido de esa window y está procediendo a lo siguiente squash / edits / etc, esto no cancelará toda la rebase, sino solo los cambios en la confirmación que se está editando actualmente. En este punto puede matar al editor como se git rebase --abort anteriormente, pero adicionalmente tendrá que realizar un git rebase --abort en la línea de command también.

Puede hacer que vim salga con un código de salida distinto de cero para cancelar la rebase escribiendo :cq . El resultado de esto es:

 $ git rebase -i HEAD~4 # enter vim, then type :cq<enter> Could not execute editor 

Desde la página de ayuda de vim vemos que cq es la abreviatura de cquit :

  *:cq* *:cquit* :cq[uit][!] Quit Vim with an error code, so that the compiler will not compile the same file again. WARNING: All changes in files are lost! Also when the [!] is not used. It works like ":qall!" |:qall|, except that Vim returns a non-zero exit code.