yhara.jp

Recent Posts

Gitのpost-checkoutフックを使ってみた

2018-10-18
Tech

Gitのpost-checkoutフックを使って、ブランチを切り替えたときにWIPコミットがあればメッセージを出すようにしてみたという話。

WIPコミットとは

WIPコミットというのは個人的な名称だが、全ての変更を仮コミットにまとめたものをそう呼んでいる。例えばブランチで新機能を開発している最中にバグを見つけてmasterを触らないといけなくなった時は、git commit -am 'WIP'でWIPコミットを作ったあとmasterに移動する。

バグ修正を終えてmasterから戻ってきたあとは、git reset HEAD^ とするとWIPコミットが削除され、作業中の状態に戻すことができる。

作業状態の保存はgit stashでもできるが、stashの場合は「このブランチにはWIPがある」ということは自分で覚えておかないといけない。一方WIPコミットはブランチに紐づくので、ブランチをcheckoutしたあとgit logすればWIPがあったことを思い出せる。

WIPコミットの注意点

…のだけど、たまにそのgit log自体を忘れて、WIPコミットがあるのに気づかずにその上にコミットを乗せてしまうことがあった。(WIPコミットはあくまで作業状態を保存するためのもので、ソースを読む人にとっては意味のない単位なので、git pushする前には消しておきたい。)

これを避けるために、git checkoutしたあとWIPコミットがあれば警告を出すようにしてみた。手順は以下。

  1. .git/hooks/post-checkoutというファイルを作成
  2. chmod +x .git/hooks/post-checkout
  3. 以下のように書く
#!/usr/bin/env ruby
out = `git log -n 1 --pretty=oneline` 
out =~ /\A(\w+) (.*)\n\z/
ref, msg = $1, $2
if msg == 'WIP'
  puts "このブランチにはWIPがあります"
end

こうすると、git checkoutするたびに以下のスクリプトが動いてWIPコミットがあるかどうかチェックしてくれる。

More posts

Posts

(more...)

Articles

(more...)

Category

Ads

About

About the author