magitはEmacsのgitクライアントのデファクトスタンダードです。CUIインターフェースにもかかわらず、GUIのgitクライアントに負けないすごい機能を持ち合わせています。
magitの使い方はそれこそ膨大すぎて、全て説明しようとすると1冊本が書けてしまいます。
英語ですが、emacsdocsにmagit専用のドキュメントページがあるので、ここで紹介する以上の情報が欲しい方はそちらを参考にしてください。
(use-package magit
:ensure t
:bind (("C-x g" . magit-status)
("C-x M-g" . magit-dispatch-popup))
:config
(defun mu-magit-kill-buffers ()
"Restore window configuration and kill all Magit buffers."
(interactive)
(let ((buffers (magit-mode-get-buffers)))
(magit-restore-window-configuration)
(mapc #'kill-buffer buffers)))
(bind-key "q" #'mu-magit-kill-buffers magit-status-mode-map))
説明ように適当なリポジトリを作成して、githubにも登録してみます。
mkdir html
cd html
touch index.html
git init
index.html
にhtml 5の側だけ用意します。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Document</title>
</head>
<body></body>
</html>
githubにテスト用のプライベートリポジトリを作ります。
リポジトリ名はなんでも良いのでgit-test-repo
とかにします。
Githubに表示されている、こんな感じのリモートの名前は後で使うので、コピっておいてください。
magitはデフォルトでキーバインドされているコマンドは2つしかありません。
"C-x g" magit-status)
と("C-x M-g" magit-dispatch-popup)
です。
magitは他のemacsパッケージとは違って、どちらかというとEmacsというOSを使ってgitのクライアントを動かしているイメージです。magitを使ったgitの操作もEmacsで対話的にやるよりかはMagitクライアントの中で操作します。
magitを起動するコマンドは"C-x g" magit-status)
です。最初はそれを実行してみましょう。
とてもシンプルなウィンドウが表示されます。
このバッファでは、magitのあらゆるショートカットキーが機能します。
どのコマンドがどれに紐づいているかを暗記するのは大変なので、1つだけ覚えておきましょう。
h
をタイプするとmagitのヘルプが開きます。
青く強調表示されたキーをタイプすると、gitの目的の操作へ移動していきます。
最初に作成した、index.html
をステージに上げます。
magitのバッファで、カーソルをindex.html
に合わせて、s
とタイプするとステージされます。
逆に、ステージから下ろす場合は、同じくindex.html
にカーソルを当てて、u
とタイプします。
ステージに上げた差分をコミットします。
c
とタイプするとこのようなコミット操作へのウィンドウが表示されます。
上の画像を見ると、c
がコミットへ進むキーになることがわかります。そのままc
をタイプすると、コミットログのバッファと差分が表示されます。
コミットログバッファにfirst commit
と入力し、これがコミットメッセージになります。
コミットを確定するにはC-c C-c
を入力します。
magitを利用したコミットができました。
Githubのリモートを追加します。
"C-x g" magit-status)
でmagitバッファを開いて、とりあえずh
でヘルプを見ます。
リモート関連はM
とあるので、それをタイプします。
リモートを加えるはAdd
なのでa
をタイプします。
エコーエリアにRemote name:
が表示されるので、origin
とタイプしてエンターを押します。
Remote url:
と出るので、上の方でコピーした[email protected]:yourname/git-test-repo.git
みたいなものを貼り付けてエンターを押します。詳しくは自分で作成したGithubのリポジトリページをみてください。
Set remote.pushDefault' to "origin"? (y or n)
はデフォルトのプッシュ先として設定して良いかを聞かれるので、y
をタイプする。 "C-x g" magit-status)
でmagitバッファを開いて、h
でヘルプを見ます。
Push関連はP
なのでそれをタイプします。今の設定ではorigin/main
がリモート先です。そこに向けてプッシュしたいのでp
をタイプします。
エコーエリアにGit finished
が表示されればプッシュが成功しています。
"C-x g" magit-status)
でmagitバッファを開いて、h
でヘルプを見ます。
ログ表示はl
でそれをタイプします。次のウィンドウではいくつかのログの表示オプションが提示されます。一番無難なのはローカルのブランチも、リモートのブランチも表示するb
です。リモートの表示が不必要な場合はl
がおすすめです。ここではリモートもチェックしたいのでb
をタイプします。
Gitの操作が終わったら、magitアプリケーションを終了します。
magitはコミット操作が終わってもデフォルトでは3つのバッファを放置したままにします。
magit-process: html. %*- 171 Magit Process
magit-diff: html %%- 169 Magit Diff
magit: html %%- 233 Magit
そのままだと邪魔なので、mu-magit-kill-buffers
でmagitを終了時に削除しています。
このコードはこちらの方を参考にさせてもらいました。
(defun mu-magit-kill-buffers ()
"Restore window configuration and kill all Magit buffers."
(interactive)
(let ((buffers (magit-mode-get-buffers)))
(magit-restore-window-configuration)
(mapc #'kill-buffer buffers)))
(bind-key "q" #'mu-magit-kill-buffers magit-status-mode-map)
magitはここで紹介したもの以外でも、amend、rebase、pull、force pushなどにももちろん対応しています。
どうやって操作し良いかわからなくもてヘルプを開いて、そこから目的の操作までキーをタイプして挑戦してみてください。