2023年4月17日
magitはEmacsのgitクライアントのデファクトスタンダードです。CUIインターフェースにもかかわらず、GUIのgitクライアントに負けないすごい機能を持ち合わせています。
magitの使い方はそれこそ膨大すぎて、全て説明しようとすると1冊本が書けてしまいます。
英語ですが、emacsdocsにmagit専用のドキュメントページがあるので、ここで紹介する以上の情報が欲しい方はそちらを参考にしてください。
こちらが完成した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 initindex.htmlにhtml 5の側だけ用意します。<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Document</title>
</head>
<body></body>
</html>githubリポジトリの作成
githubにテスト用のプライベートリポジトリを作ります。
リポジトリ名はなんでも良いので
git-test-repoとかにします。Githubに表示されている、こんな感じのリモートの名前は後で使うので、コピっておいてください。
git@github.com:yourname/git-test-repo.gitmagitの使い方
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:と出るので、上の方でコピーしたgit@github.com:yourname/git-test-repo.gitみたいなものを貼り付けてエンターを押します。詳しくは自分で作成したGithubのリポジトリページをみてください。
Set remote.pushDefault' to "origin"? (y or n)はデフォルトのプッシュ先として設定して良いかを聞かれるので、yをタイプする。これでリモート設定が完了しました。
Gitプッシュする
"C-x g" magit-status)でmagitバッファを開いて、hでヘルプを見ます。
Push関連は
Pなのでそれをタイプします。今の設定ではorigin/mainがリモート先です。そこに向けてプッシュしたいのでpをタイプします。
エコーエリアに
Git finishedが表示されればプッシュが成功しています。Gitログを表示
"C-x g" magit-status)でmagitバッファを開いて、hでヘルプを見ます。
ログ表示は
lでそれをタイプします。次のウィンドウではいくつかのログの表示オプションが提示されます。一番無難なのはローカルのブランチも、リモートのブランチも表示するbです。リモートの表示が不必要な場合はlがおすすめです。ここではリモートもチェックしたいのでbをタイプします。
このようにログが表示されます。

magitの終了
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のバッファで
qをタイプし終了します。その他の操作とまとめ
magitはここで紹介したもの以外でも、amend、rebase、pull、force pushなどにももちろん対応しています。
どうやって操作し良いかわからなくもてヘルプを開いて、そこから目的の操作までキーをタイプして挑戦してみてください。

Ted
大学でコンセンサスアルゴリズムを研究。卒業後ベンチャー企業に入社してフルスタックでWebサービスを開発。現在は大手IT企業に転職し、プログラミングを行っている。AIにプログラマーの仕事を奪って欲しいと願っている。