Edited at
ZeneloDay 7

git add -pのすゝめ

うっかり秘匿情報をプッシュした経験はありませんか?

そんな悲劇を回避するためのtipsです。


そもそも

$ git add -A するな。

force push並の大罪やぞ。悔い改めろ。


git add -pとは

Git - git-add Documentationからの引用


-p

--patch

Interactively choose hunks of patch between the index and the work tree and add them to the index. This gives the user a chance to review the difference before adding modified contents to the index.

This effectively runs add --interactive, but bypasses the initial command menu and directly jumps to the patch subcommand. See “Interactive mode” for details.


要するにaddするに差分を対話的に確認できるコマンドです。


Let's try

ワーキングツリーに差分がある状態で、 $ git add -p してみてください。

Screen Shot 2018-12-07 at 23.32.29.png

こんな感じになるはずです。

差分の塊(hunk)をステージするかを対話的に聞かれるので、[y,n,q,a,d,e,?]を使って、処理していきます。

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

困ったときは?を実行してください。helpが表示されます。

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
e - manually edit the current hunk
? - print help

なんだか色々あって不安になるかもしれませんが、ynの2つを覚えれば大丈夫です。


  • y

    差分の塊(hunk)をステージングします。

    差分の内容を確認し問題なければyです。


  • n

    差分の塊(hunk)をステージングしません。

    差分の内容を確認し意図しない秘匿情報や、デバッグログ出力等が含まれていた場合はnです。


一つ処理するとまた次の差分が自動的に表示され、全ての差分に対して処理するまで続きます。

q で強制的にそれ以降を全てステージングせずにadd -pを終了することも出来ます。

上記の処理を繰り返してステージングが完了したら、いつものようにcommitを行ってください。

Screen Shot 2018-12-07 at 23.37.51.png


反省


force push並の大罪やぞ。悔い改めろ。


とかいいながら、サンプルプロジェクト作るときに-Aを使ってしまいました。悔い改めます。