kakakakakku blog

Weekly Tech Blog: Keep on Learning!

几帳面な人のための git add -p

タイトルに特に意味はないんだけど,git add -p っていう便利なコマンドを今さら知ったので,簡単にまとめておく.これもっと早く知ってたら今まで push してきた commit がよりキレイにまとめられてたなー.くやしー.

commit はある程度細かく

commit の粒度って,プロダクトにルールがなければ,まぁ個々人のスタイルで打つことが多いと思う.変更内容を1つの commit にしてプルリクする人もいるし,変更内容の中でもコンテキストごとに commit を分割してプルリクする人もいる.

僕は基本的に後者で,レビューのしやすさのためだったり,見直すときの自分のためだったりを考えて,commit を分割する.

git add は最後にまとめて

コンテキストごとに git add して git commit するのも面倒なので,ある程度書き進んでからファイルを選んで git add して git commit すると思うけど,同じファイルに複数のコンテキストで編集しちゃったりすると,今までちょっと困ってた.

Rails の例で言えば,モデルにバリデーションを追加する変更と,モデルにメソッドを追加する変更があったときに,まぁ commit を分割したいなっていうシチュエーションは少なからずあると思う.あくまで例だけど.

そこで git add -p

そんなときは git add -p を使えば,変更行ごとにステージングできるので便利.

ハンクっていうのが変更行のことで,こんな感じで聞かれるので,まずは s で分割して,y or n で,ステージングする変更行だけを add していくことができる.

Stage this hunk [y,n,q,a,d,/,e,?]? 

ちなみにハンクに対して使える指示は他にもある.

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

まとめ

とても便利!知っておいて絶対に損はしない!