git commit --amend
またはgit rebase -i
を使用すると、vimが開いて変更を加えることができます。その後、気が変わって何も変更せずにvimを終了しても、git reflog
に表示されるコミットが行われます。
何もコミットせずにエディターを終了するにはどうすればよいですか?
git commit --amend
またはgit rebase -i
を実行しているときにgitが変更を行わないようにするため。
メッセージを削除して保存します。 gitが行うのは、空でないメッセージを探して、有効なコミットが行われたかどうかを確認することだけです。コミットメッセージがあるので(以前に何かをコミットしたため)、gitはそれが有効なコミットまたはリベースであると考えます。
変更を加えて保存していない場合は、:q!
で十分です(プレーンコミットの場合、修正していない場合)が、私のような場合は、おそらく(無意識のうちに)持続している可能性があります編集されたメッセージ。
Git(およびVimを使用してメッセージを編集するその他のツール)は、エディターが正常終了以外の終了ステータスで終了した場合、プロセス全体を中止します(メッセージに保存された変更を無視します)。 Vimでは:cq[uit]!
コマンドを使用してそれを行うことができます。
cq
をエラーなしで保存せずに終了する場合は、!
なしでvim
を使用できます。
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)であるか何かがうまくいかなかった場合に呼び出し元アプリケーションに通知する簡単な方法です。