Exit Vim without committing changes in Git

后端 未结 4 1202
深忆病人
深忆病人 2020-12-24 10:42

When I use git commit --amend or git rebase -i, vim opens up for me to make changes. If I then change my mind and exit vim without making any chang

相关标签:
4条回答
  • 2020-12-24 11:18

    When you haven't made changes and saved them, :q! could suffice (in a plain commit; when you're not amending), but if you are like me, chances are you've already (even unconsciously) persisted the edited message.

    Git (and other such tools that use Vim to edit a message) will abort the entire process (and ignore any saved changes to the message) if the editor quits with a non-success exit status. You can do that in Vim with the :cq[uit]! command.

    You may want to use cq without ! if you want vim to exit with an error and without saving.

    0 讨论(0)
  • 2020-12-24 11:26

    the git appication runs the editor application, and if the editor application returnes unsuccessfully (non-zero exitcode) the git application recognizes this and stops further processing.

    in vim you can perform this with :cq!

    from the vim manual:

                                                            :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.
    

    this works for svn, too! the difference AFAIK between svn and git is, that svn don't like empty commit messages and stops when you quit with :q! (even if the exitcode is 0) but for git this is ok. for both it is not ok, if the editor gives an non-zero exitcode.

    exitcodes are a very fundamental concept in unix/linux and and easy way to inform the caller application if everyhing was ok (exitcode 0) or something went wrong.

    0 讨论(0)
  • 2020-12-24 11:32
    :cq!
    

    This will force an error to Vim and it will not save any changes. Link to Vim manual.

    You may want to use cq without ! if you want vim to exit with an error and without saving.

    0 讨论(0)
  • 2020-12-24 11:33

    To get git to not make a change when you are executing git commit --amend or git rebase -i.

    Just delete the message (and save). All git does is look for a non empty message to see if a valid commit happened. Since there is a commit message (because you commited something before) git thinks that its a valid commit or rebase.

    0 讨论(0)
提交回复
热议问题