はじめに
magitはEmacsからgitリポジトリの操作ができるツール。
一度慣れたらあまりの便利さに手放せなくなるのだが、少しとっつきにくいところもある。
そこで、Emacs,git共に少し触れる程度の人を対象にチュートリアルを作成してみた。
インストールについて
標準のパッケージマネージャを使用している場合は、M-x package-list-packages
でパッケージリストを出し、
magitにカーソルを合わせてiキーを押しマークをつけて
xキーでインストールできる。
標準以外のパッケージマネージャ(Cask, el-get等)を使っている人は各マネージャの方法に従ってほしい。
リポジトリ作成
以下$HOME/magit_tut
で作業をする。
($ mkdir $HOME/magit_tut
、またはEmacs上ならdiredで+キーでディレクトリ作る)
リポジトリ作成(git init
)を行う場合M-x magit-init
を実行すれば良い
magitへの入り口
M-x magit-status
が通常magitへの入り口となる。以下のキーバインドを設定しておくと便利
(global-set-key (kbd "C-x g") 'magit-status)
?から始める
magit-statusで?キーを押すとコマンド一覧が出るので「迷ったらまず?」を覚えておくとよい。
各モードに入るには、カーソルを合わせてEnterでも良いが、例えばCyerry-Pickingならshift + aを押すだけで良い
コミットしてみる
$HOME/magit_tut/test.txt
を開いて以下の入力を行う
A
保存した後magit-statusを開くと
このように出るのでtest.txt
にカーソルを合わせてsを押すことでstagingする。
この状態でcを押すとコミットモードとなる。
さらにcを押してstagingしたものをコミットする。このときコミットメッセージの入力画面が出る。
コミットメッセージを入力しC-c C-c
でコミット完了。
コミットログを見る
$HOME/magit_tut/test.txt
を以下のように編集し、同様にコミットした後コミットログを見てみる。
A
B
magit-statusでlを押すとログモードとなる。
いくつか種類があるが、ここではbを選択する。以下のようにコミットログが表示される(qキーを押せばmagit-statusに戻る)
コミットにカーソルを合わせてEnterを押せばそのコミットでの変更点を見ることができる(ログに戻るときはqキー)
ブランチを作成する
現在のmasterからブランチを作成してみる。
magit-statusでbキーを押し、ブランチモードにする。
今回はブランチを作って、そのブランチをチェックアウトするのでc(Checkout new branch)を選択する。
ミニバッファでブランチ元を聞かれるが、今回はmasterをブランチ元とするのでそのままEnter
次に新しく作るブランチ名を聞かれるので、入力してEnter
magit-statusの先頭を見ると新しいブランチになったことがわかる。
マージする
ブランチbr_from_B上でtest.txtを編集、コミットする
A
B
C
コミットログ(l b)をみるとこうなっているはず
この状態からmasterにbr_from_Bをマージしてみる。
まずはmasterをチェックアウトするため、magit-statusでbでブランチモードにする。
bを押して、masterをチェックアウト(ここではそのままEnter)
magit-statusの先頭をみてmasterになっていることを確認したら、mを押してマージモードへ
mキーを押すと、マージするブランチを聞かれるのでbr_from_Bを指定(ここでは単純にEnter)
コンフリクト等が起きなけえればこれでマージ完了。ログを見るとマージできていることがわかる。
プッシュする
ここまでをgithubにプッシュしてみる。
リモートの追加もEmacs上で可能だが、あまり頻繁に行うものでもないので、今回はシェル上で行ってしまう。
github上にmagit_tutというリポジトリを作成して、originとして追加する。
$ git remote add origin https://github.com/<あなたのアカウント>/magit_tut.git
Emacs上のmagit-statusに戻りShift+pを押してプッシュモードに入る
uを押してプッシュ先にorigin/master
を指定する。
magit-statusの先頭がこのようになればOK
なお、u(upstream指定)でプッシュしたので、次回からプッシュモードはこのようになり、uを指定すれば即座にプッシュされる
ログからのブランチ作成
magitではコミットログ画面からコミットを指定してブランチを作成することもできる。
magit-statusからl bでコミットログを表示して「add A」にカーソルを合わせる
以前ブランチを作った時と同じようにb cと押すとブランチ元に選択したコミットが入った状態でミニバッファが表示されるのでそのままEnter
ブランチ名はbr_from_Aとする
これでブランチが作成された。
マージコンフリクトに対処する
ブランチbr_from_Aにいる状態でファイルを編集してコミットする。(コミットメッセージは「add D」)
A
D
masterへ戻りbr_from_Aをマージしてみる。
bでブランチモードに入り、bでmasterをチェックアウト。
前回同様にm mでbr_from_Aを指定してマージを実行してみる。
「unmerged test.txt」でEnterを押すと編集画面となる。
以下のように編集して保存。
A
B
C
D
magit-statusを表示させ、「unmerged test.txt」でsを押してstagingする。
あとは通常コミット時と同様にc cでコミットメッセージ入力画面にしてC-c C-c
でコミット実行
コミットログ(l b)でマージされていることが確認できる。
編集の一部をコミット
masterで作業を続ける。
ファイルを以下のように編集する
A
HOGE
FUGA
B
C
D
E
magit-statusを表示し「modified test.txt」にカーソルを合わせTabを押すと以下のように表示される
「+E」の部分にカーソルを合わせCtrl+Spaceを押し「+E」だけを選択した状態でsを押すとそこだけstagingすることができる。
この状態でコミットすれば「E」の追加だけをコミットすることが可能となる。
編集の一部をUndo
上記の状態で同様にkbd>Ctrl+Spaceで「+FUGA」を選択しkを押すことでその部分をUndoできる。
元に戻せない(注意!)ので本当に消してよいかミニバッファで質問される。
yを入力すればUndoされる。
また「modified test.txt」にカーソルを合わせてkキーでファイルの変更全体をUndoできる。
これも元には戻せないため、ミニバッファに警告が出る。
yを押して変更を取り消す
ここまでをプッシュ
Shift+p uでここまでをプッシュしておく
プルの準備
github側でファイルの編集をおこなう。
githubでtest.txtを表示して右上の鉛筆マークでファイルが編集できるので最終行に「F」を追加してコミットする。
↓↓↓↓
フェッチ/プルする
フェッチする
fでフェッチモードに入る
aで全てのリモートからフェッチを行ってくれる
githubでの変更点がフェッチされているのがわかる。この時点ではmasterに反映はされていない。
プルする
origin/masterをmasterにマージしても良いが、ここではプルしてみる。なお、フェッチせずいきなりプルしても問題はない。
Shift+fでプルモードに入る
uでorigin/masterからプルする
githubでの変更分が反映された。
おわりに
必要最小限のmagitの機能説明はできたと思う。
magitには他にも便利な機能がたくさんあるため、ぜひ使いこなしていって欲しい。