タイトルに特に意味はないんだけど,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
まとめ
とても便利!知っておいて絶対に損はしない!