くりにっき

フルスタックキュアエンジニアです

tigから git rebase -i したらいろいろ捗った

git dtコマンド - razokulover publog を見て自分もgitのコマンドをカスタマイズしてるのを思い出したので普段よく使っているのを紹介します。

対象者

作業途中はtmpコミットをたくさん作って、最後に git rebase -i でコミットを整えている人

前置き

gitのタイプ数を減らす

gitコマンドを使う時に毎回 git と3文字タイプするのは時間の無駄なのでエイリアスつけるのをおすすめします

~/.bash_profile とか ~/.bashrc 辺りに下記を書きます。

alias g='git'

これで g だけでgitコマンドが使えます

git-now

最速でtmpコミットするためのコマンド。Macなら brew install git-now でok

~/.gitconfig に下記を書きます。

[alias]
  n  = now --all --stat
  • --all : git add . して新規ファイルも全部コミットする
  • --stat : デフォルトだとコミットメッセージにdiffが全部入るため、変更行数だけにする

g nだけでこのようなtmpコミットが出来ます

[from now] 2014/08/06 23:28:50

  spec/helpers/application_helper_spec.rb | 4 ++++
  1 file changed, 4 insertions(+)

tig

ターミナル上でgitのコミットツリーをいい感じに表示してくれます。

jonas/tig

f:id:sue445:20140807204630p:plain

SourceTree も便利なんですが、ターミナルから動きたくない時や画面がないような環境では重宝します。

gitを逆から書いたらtigなので覚えやすいです。

tigもgit同様使用回数が多いのでエイリアスにします。

alias t='tig'
alias ta='tig --all'

デフォルトだと現在のbranchしかツリーを見れないですが、--all をつけることで全てのbranchを見ることができます。

【本題】tigから git rebase -i する

コミット整形する時は

git rebase -i <コミットID>

のようにすると思いますが、わざわざ開始コミットを探すのは大変なのでtigで選択したコミット行を git rebase -i に渡せるようにします

~/.tigrc に下記を書きます。

bind main    R !git rebase -i %(commit)
bind diff    R !git rebase -i %(commit)

.gitconfig のalias同様 ! をつけると任意のコマンドを実行できるのを利用して git rebase -i を実行してます。

%(commit) にtigで選択している行のコミットIDが渡されます。

上の設定だとショートカットキーをRにしていますが好みに応じて変えてください。*1

こうなった

f:id:sue445:20140807003418g:plain

Rで選択した行よりも上を全部 git rebase -i で編集対象にし、全部1つのコミットにsquashしてます。

ブコメとか追記

git now --rebase とは何が違うのだろうと思った / git-nowに限らずまとめたい時に便利ってことか

その通りです。今回はtigで rebase -i するのが本題なので、大量のcommitを整形するのを説明しやすくするためにgit-nowも一緒に紹介しました

ターミナルのgif画像作るのに何のツール使ってるのか知りたい。キー入力の表示があるのが面白い。/これは多分キーストローク表示アプリのKeyCastrとかをオーバーレイさせながらスクリーンキャプチャしてる感じかな?

別のエントリ で詳しく書く予定ですがLICEcapとKeyCastrを使ってます

( ゚д゚)ハッ!!

*1:Rはrebase, revert, reset など使用頻度の高いコマンドが多いので何を割り当てるか悩みどころ