web-dev-qa-db-ja.com

Gitで変更をコミットせずにVimを終了する

git commit --amendまたはgit rebase -iを使用すると、vimが開いて変更を加えることができます。その後、気が変わって何も変更せずにvimを終了しても、git reflogに表示されるコミットが行われます。

何もコミットせずにエディターを終了するにはどうすればよいですか?

43
j0fb

git commit --amendまたはgit rebase -iを実行しているときにgitが変更を行わないようにするため。

メッセージを削除して保存します。 gitが行うのは、空でないメッセージを探して、有効なコミットが行われたかどうかを確認することだけです。コミットメッセージがあるので(以前に何かをコミットしたため)、gitはそれが有効なコミットまたはリベースであると考えます。

18
FDinoff
:cq!

これはエラーをVimに強制し、変更を保存しません。 リンク Vimマニュアルへ。

cqをエラーなしで保存し、保存せずに終了する場合は、!なしでvimを使用できます。

63
EDY ARMENDARIZ

変更を加えて保存していない場合は、:q!で十分です(プレーンコミットの場合、修正していない場合)が、私のような場合は、おそらく(無意識のうちに)持続している可能性があります編集されたメッセージ。

Git(およびVimを使用してメッセージを編集するその他のツール)は、エディターが正常終了以外の終了ステータスで終了した場合、プロセス全体を中止します(メッセージに保存された変更を無視します)。 Vimでは:cq[uit]!コマンドを使用してそれを行うことができます。

cqをエラーなしで保存せずに終了する場合は、!なしでvimを使用できます。

31
Ingo Karkat

gitアプリケーションはエディターアプリケーションを実行します。エディターアプリケーションが失敗(ゼロ以外の終了コード)を返した場合、gitアプリケーションはこれを認識し、それ以降の処理を停止します。

vimでは:cq!でこれを実行できます

vimマニュアルから:

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

これはsvnでも機能します! svnとgitのAFAIKの違いは、svnが空のコミットメッセージを嫌い、:q!で終了すると(exitcodeが0であっても)停止することですが、gitではこれで問題ありません。エディターがゼロ以外の終了コードを提供する場合、どちらの場合も問題ありません。

終了コードは、UNIX/Linuxの非常に基本的な概念であり、すべてが正常(exitcode 0)であるか何かがうまくいかなかった場合に呼び出し元アプリケーションに通知する簡単な方法です。

4
Mirko Steiner