Edited at

git-bash で $ git commit した際の挙動

More than 3 years have passed since last update.


これは何?

git bashで$ git commit -m "コミットメッセージ"

の代わりというか-mオプションを引っこ抜いて$ git commitと打った場合の動作に関するメモ

Windows環境であることを前提に、お話します。


まず結論

コミットメッセージを打ち込むためにgitさんはvimというプログラマー御用達のエディタを呼ぶ

もしもコミット操作が事故でコミットされたくなかったら、即座に:q!とでも入力してvimを終了させればコミットされない。

コミットメッセージ無しの場合はキャンセル扱いになります。


おさらい

以前git bashでコミットする際に教えたのはこんなコマンドだった

$ git commit -m "コミットメッセージ"

これは、-mというオプションでその後ろに書いた文章をコミットログに残すメッセージとしてコミットを行うコマンド。

これは-mオプションをつけた場合の奴で、元のコマンドはこれ。

$ git commit

これ自体がコミットを行うというコマンド。


-m を忘れるとどうなるの?

-mを忘れる……つまり、$ git commitとだけ打ち込んで実行をした場合、gitはコミットメッセージ編集用のエディタを呼ぶ。

エディタ自体は下記方法でも一応指定可能。

$ git config --global core.editor "使うエディタのパス"

なのだがこの設定はスペース含みに弱いし普通あまりやることはないと思うし、git-bashでやる場合はvimで十分だと思うので

指定をしていないのを前提として話をする。


実際何を呼ぶ?

結論にも書いたように、とどのつまり$ git commitを実行すると、gitはvimをコミットメッセージ編集用エディタとして呼び出す。


vimとは

コマンドライン上で実行される(いやGUI版もあるけれど)、プログラマー御用達のエディタ。

うちも仕事じゃよく使うし個人的なエディタとしてもWindows用ではgvim(GUI版のvim)を好んで使っていたぐらい。CLIのvim環境を用意するのWindowsだとめんどい

編集モードと入力モードを切り替えて使うというのが特徴的で、それによって手の位置をキーボードのホームポジションからほぼ全く動かさずに操作を完結できるというのがポイント。

つまりマウスどころか十字キーにすらに手をのばす必要がこのエディタでは全くなくなる操作感なのだ……。


vimの基本操作

ここからはgit-bashで実際に$ git commitを叩いた時に起動するvimくんの基本的な操作方法についてのメモになる。

編集モードと入力モードの2つに分けて説明しよう。あくまで基本操作なので、他の操作方法については別途下記チートシートを見るように

http://vim.rtorr.com/lang/ja/

編集モード
:Ctrl+のついてないコマンドは入力モード切り替えを除いて数字を前に置くとその数字分処理する

i
入力モードに切り替え

h j k l
左から ← ↓ ↑ → に対応。あ、ちゃんと十字キーでもカーソル動かせるから安心してください

u
アンドゥ。やらかした時はこれで戻せる。つまり他のエディタでいうCtrl+z

Ctrl+r
リドゥ。つまりやり直し操作。他のエディタとかだとCtrl+yとかに割り当てられてるアレ。

x
カーソル上、または選択範囲の文字の削除。実は内部的には切り取り処理だったりするので後述する貼付け操作で貼り付けられる。

dd
行の削除。djとかdkとかやると一行下の行や一行上の行も巻き込む。削除とはいうが切り取り処理なのでpで貼れる。

v
選択モードに変更。マウスドラッグのように選択範囲を選ぶモードになる。Escキーで抜けられる

V
行選択モードに変更。こちらは選択範囲が行単位になる。

Ctrl+v
矩形選択モードに変更。選択範囲が矩形で取れる。地味に役に立つ。

y
選択した範囲のコピー。実は「ヤンク」と呼ぶらしい。が、コピーと覚えても問題無いだろう。

p
貼付け。コピーした内容を貼り付ける

:w
保存。オプション無しでは上書き保存の挙動。普通のエディタで言うCtrl+S

:q
終了。保存してない時は怒られる。が、保存したくない場合は:q!で強制的にファイル編集を終了できる

:wq
保存して終了。やってることは:w:qを順番にやっているだけ

入力モード

EscまたはCtrl+[

選択モードへ変更


あとがき

もともとこれは身内でエンジニア以外のメンバーも含めてSourceTreeを使用していた時に、なんととあるメンバーのSourceTreeが落ちるようになってしまい、その対策で

git-bash、使おうぜ。(ニッコリ

とやった時に、git commit -m "コミットメッセージ"という書き方で教えたのですが、

git-bashとはいえWindows上で-m忘れた時の挙動ってどうなるんだっけ……というのを実際にやって検証してみた結果、vimが立ち上がるということで、うっかりやらかして「なんだこれ操作がわからん!しかもCtrl+Cでも閉じられない!」という事態で大ハマリしないようにというメモ書きでした。(立ち上がっているエディタがvimであるというところから把握する必要もあるし)