2017年9月30日土曜日

emacsでmagitを使ってタイプ数を減らす話


magitとはemacsでgitの操作ができるプラグインです。
「magitを使えばgit操作のためのタイプ数を減らせる」と聞いたので、自分が普段している操作をmagitで行う方法を調べてみました。
メモも兼ねて共有します。

magitのインストール方法

init.elにmeplaを設定します
~/.emacs.d/init.el
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
(package-initialize)

melpa設定後にemacsを起動し、[M-x] -> list-packages でパッケージリスト表示します。
リストの中からmagitを選べばインストールできます。

任意設定

magitのことを調べていたら、複数のサイトでmagitのショートカットキー設定が紹介されていました。
[C-c]+g派と[C-x]+g派が居るようですが、見かけた回数の多い前者に乗っかります。

下記の設定をinit.elに記述すると、[C-c]+gでmagitを起動できるようになります。
~/.emacs.d/init.el
(global-set-key (kbd "C-x g") 'magit-status)

magitの起動と終了

[M-x] + magit-status (もしくは[C-x] +g)でmagit-statusを起動できます。
qを押すとモードを終了できます。

この記事では主にmagit-statusを起動した状態の操作を説明します。

magitの操作に困った時は?

?を押すとhelp画面が出ます。
qを押すとモードを終了できることが多いです。
[C-c]+gで入力をクリアできることが多いです。

emacs上に操作のヒントが表示されていることもあるので、magit-statusの上部や、emacsのログ出力欄を時々見てみると、有益な情報が得られるかもしれません。

バッファの更新

magit-statu起動中に行った変更は、自動的には反映されません。
gを押すと更新されます。

git remote add origin branch-url

remoteブランチを登録する方法です。

1. Mを押してremote設定モードになります。
2. aを押して、addモードになります。
3. addするリモート名(originなど)を入力して、エンターを押します。
4. remoteのurlを入力します。
5. yを入力してエンターを押すと、登録が完了します。

gitコマンドに関する単語を入力せずに済みます。

git pull some-branch

ブランチをpullする方法です。

1. Fを押してpullモードになります。
2. originに該当するブランチがあるなら、uを押すとpullできます

magitの起動と終了を除くと、たった2文字の入力でpullできちゃいます。

git checkout -b some-new-branch

ブランチを作りつつ、作ったブランチで作業を進める方法です。

1. bを押してブランチ操作モードになります
2. cを押して新しいブランチを作って移動(checkout new branch)モードになります
3. コピー元のブランチ名を入力します。今居るブランチで良ければエンターを押します。
4. 新しく作るブランチ名を入力して、エンターを押します。

ブランチ名の入力は避けられませんが、gitに関するタイピングは半分くらいになりそうです。

git checkout some-branch

ブランチを変更する方法です。

1. bを押してブランチ操作モードになります。
2. bを押してcheckoutモードになります
3. ブランチ名を入力します。([Tab]を押すと、一覧が表示されたり、自動補完されたりします。)

ブランチ名の一覧を見れるのが便利です。

git diff; git add -p

変更を見つつ、コミットしたい部分をaddする方法です。

1. dを押してdiffモードになります。
2. uを押して、addされていない変更の一覧を表示します。
3-a. addしたいブロックでsを押します。
3-b-1. 特定の行だけaddしたい場合は、[C-space]で選択モードになります。
3-b-2. 行を選択したらsを押します。
3-b-3. addできたら[Tab]を押してブロックやファイルを閉じます。
4 qを押して、diff閲覧モードを終えます。

一覧から必要な部分だけを選んでaddできるので、ファイル名を入力したり、addしたかった部分をやり過ごしてしまって最初から見直したりする必要がないので、ありがたいです。

git commit -m "commit detail"

コミットする方法です。

1. cを押して、もう一度cを押します。
2. コミット名を入力します
3. [C-c]を入力して、もう一度[C-c]を入力します。(キャンセルする場合は[C-c] [C-k]です。)

[C-c]2回押しがコミット実行であることが分かりにくいですが、それさえ覚えてしまえばタイピングの量を減らせそうです。

git commit --amend

前回のコミットを修正する方法です。

-- amendしたい変更があれば、事前にaddしておきます。
1. cを押してコミットモードになります。
2. aを押してamendモードになります。
3. コメントを変更する場合は、修正を行います。
4. [C-c]を入力して、もう一度[C-c]を入力します。(キャンセルする場合は[C-c] [C-k]です。)

コミットと同じ感じで操作できます。

git reset HEAD^ --hard

修正を破棄しつつ、一つ前のコミットに戻る方法です。

1. Xを押してリセットモードになります。
2. hを押してハードリセットに進みます。
3. 「HEAD^」を入力し、エンターを押して、ハードリセットを実行します。(HEAD^を入力しなければ、HEADにハードリセットされます)

git push some-branch

ブランチをpushする方法です。

1. Pを押してpushモードになります。
2. eを押します。
3. ブランチ名を入力します。(tabで補完できます。)

まとめ

最初は操作方法が分からなくて戸惑いますが、操作を知ってしまえばタイピング数を減らせますし、変更内容の確認がコマンド動作よりもしやすそうです。

参考

[Emacs] magitチュートリアル
Emacs のMagitで`git reset --hard <commit id>`を楽にやる
7.1 Remotes

変更履歴

2017.10.02
git pushの手順がorigin/masterしか対応していなかったため、変更しました。
2017.10.04
git remote addの手順を追加しました。

0 件のコメント :