読者です 読者をやめる 読者になる 読者になる

エンジニアをリングする

プログラをミングしたり。

my web site twitter

Gitの便利な-pオプション四兄弟

この記事はGit Advent Calendar 2014の6日目の記事です!
(更新がお昼になってしまいました、ごめんなさい><)

みなさん!
Gitの-pオプション使ってますか?

今日は便利な-pオプションを使えるコマンドと、使いどころをご紹介します!

紹介する内容

  • git add -p
  • git stash -p
  • git log -p
  • git stash show -p
  • git checkout -p

git add -p

きっとこれが一番有名ですね!
追加したい変更を、ファイル単位ではなく差分のブロックごとに追加していくことができます。

Git管理されているindex.htmlに、以下の修正を加えたとしましょう。

  • ヘッダーのメニューの文字を小文字から大文字に変更
  • Contactに新しいリンクを追加

このまま両方まとめてコミットしてコミットメッセージに両方の内容を書いておくというのもひとつですが、ひとつの変更がひとつのコミットになっているほうが編集の意図が明確で綺麗なコミットログになります。
つまりこの1ファイルの2つの差分ブロックを別々にコミットしたい・・・

そんなときにgit add -pです!!

こんな感じになります!

f:id:yoshiko_pg:20141206143125g:plain

  • おもむろにgit add -p と打ち込む
  • 差分が順番に表示されるので、addしたいときはy(yes)、addしたくないときはn(no)
  • 全部終わると、yを押した差分だけがaddされている!べんり!

ちなみに、表示されたブロックをさらに区切りたいときはs(split)を入力でさらに分割してくれます。
差分に隙間がなく自動でこれ以上区切れない場合はe(edit)で手動修正もできます。

さらに詳しくは以下のエントリなども参考に!

横着で神経質な私とあなたに贈るgit add -p - Qiita
git add -p のときの e(手動編集) - 肉とビールとパンケーキ by @sotarok (手動editについて)

git stash -p

続きましてこちら!
同じことがstashでもできるのです!

※ ちなみにstashとは、今行っている変更を一時的に保管しておける倉庫みたいなイメージです。
何か修正中のファイルがあるけど今すぐpullしないといけない、みたいなときにgit stashするとファイルの変更がstashされてHEADの綺麗な状態になります。
pullなりなんなりが終わって、変更を取り戻したい!となったらgit stash popで変更が戻ってきます。
べんり。

で、stashで-pってどんな時に使うのよ?って話ですが、やりかけのふたつの修正が入り混じっているときに片方の差分だけをstashしておいてもう片方の修正を進め、そちらがコミットまで終わったらstashした変更をpopする、みたいな感じで個人的には割と使う場面があったりします。
使い方はadd -pのaddがstashになるだけで、stashしたい差分のときにy, 手元に残したい差分のときにnです。

git log -p

git log はとてもよく使うコマンドだと思いますが、ログ情報と一緒に差分も見たい時ってよくありませんか?
そんなときにはgit log -pです!

f:id:yoshiko_pg:20141206143129g:plain

ログが一緒に見られる!べんり!

git stash show -p

git stash popする前に、stashした差分の内容を確認したいことってよくありますよね?
そんなときにはgit stash show -pです!

f:id:yoshiko_pg:20141206143132g:plain

どれをpopすればいいかすぐわかる!べんり!

(追記)

stashの中身を見たいときは git show stash で見れるよと教えてもらいました!

f:id:yoshiko_pg:20141206151720g:plain

メッセージとか日付も一緒に見れるからこっちのほうがべんり!

git checkout -p

ブクマコメントでgit checkout -pのことを思い出したので追記!

Gitの便利な-pオプション四兄弟 - エンジニアをリングする

git checkout -pも便利。変更を部分的になかったことに出来る

2014/12/06 19:32

コメントにある通り、git checkout -pで部分的なcheckoutができます!
checkoutしたい差分(消したいところ)でy、残したい差分でnです。

f:id:yoshiko_pg:20141207144217g:plain

部分的に差分を消せてすごくべんり!

まとめ

-p べんり

みんな使いましょう!!

余談

キャプチャのターミナルに表示されている(master@www)は現在のgit statusによって色が変わるようになっています!
これもめちゃくちゃ便利なのでおすすめですよ!