読者です 読者をやめる 読者になる 読者になる

magit.el を試してみた

emacs

egg.elいまいちーと書いたところ、

@gom egg.elが嫌ならmagit.elでどう?俺的にはそっちのが使いやすいけど。

http://twitter.com/rubikitch/statuses/1901340067

id:rubikitch さんに教えてもらいました。ありがとうございます。
というわけで、早速試してみた。

インストール

makeするのね

$ git clone git://github.com/jdhuntington/magit.git
$ ./autogen.sh
$ ./configure --prefix=$HOME/lisp/magit
$ make
$ sudo make install

.emacsの書き換え

(add-to-list 'load-path "~/lisp/magit/share/emacs/site-lisp/")
(require 'magit)

git status

statusバッファ上でキー操作を行う。
キー操作は以下の通りで、大体の操作はできる模様。

違うbranchにpushするとか、refspecをごちゃごちゃいじる辺りはどうなってるのか不明。

Magit User Manual

M-x magit-status
  • TAB: セクションの表示を切り替える
  • M-1, M-2, M-3, M-4: セクション表示の切り替え
  • Section: Untracked file
    • s: ファイルをステージに追加する(git add)
    • i: .gitignoreにファイルを追加する
    • C-u i: ignoreファイルを指定する
    • I: .git/info/excludeにファイルを追加する
    • k: ファイルを削除する*1
  • Section: Unstaged Changing / Staged Changing
    • s: ファイルをステージに追加する(git add)
    • S: 全ファイルをステージに追加する
    • u: ファイルをステージから降ろす
    • U: 全ファイルをステージから降ろす
    • k: 変更を取り消す
    • c: コミットログを書く
    • C: コミットログをチェンジログ形式で書く?
    • C-c C-c: コミットする(git commit)
    • C-c C-a: コミットをやり直す(git commit --amend)
  • Log
    • l: ログ一覧を表示する(git log)
    • L: 詳細ログの一覧を表示する(git log --stat)
    • ログを選択して RET: ログの詳細を表示する(git log -p)
    • a: コミットを今のブランチに適用する(git cherry-pick & NOT commit)
    • A: コミットを今のブランチに適用し、コミットする(git cheery-pick & git commit)
    • v: コミットを取り消す(git revert)
    • C-w: コミットのsha1ハッシュをコピーする
    • =: 今のコミットとの差分を表示する
    • .: コミットをマークする
  • h or H: 今のHEADまでのログを表示する
  • d: ワーキングコピーからあるコミットまでの差分を表示する(git diff)
  • D: 2つのコミットの差分を表示する
  • t or T: タグを作成する(git tag)
  • x: コミットを取り消す(git reset --soft)
  • X: コミットと変更を取り消す(git reset --hard)
  • Stash
    • z: stashを作成する(git stash)
    • a: stashを適用する(git stash apply)
    • A: stashをpopする(git stash pop)
    • k: stashをdropする(git stash drop)
  • b: ブランチを切り替える(git checkout)
  • B: 新規ブランチを作成して切り替える(git checkout -b)
  • w: wazzup?
  • m or M: マージを行う
    • X: 手動マージを中止する
    • e: resolved conflict?
  • R: rebase
  • P: push (default remote, current branch)
  • f: git remote update
  • F: pull
  • git svn
    • N c: git svn commit
    • N r: git svn rebase

後半は疲れてしまったのでかなり適当です。
必要なコマンドは押さえられていて、いい感じに扱えそう。

*1:物理的に削除されるようだ