search
LoginSignup
186

More than 5 years have passed since last update.

posted at

updated at

Organization

初心者から一歩抜け出すためのGitの業 〜 git add -p

Gitはとても便利だけど、一歩踏み込むと人外魔境だったりしてちょっとこわい。
ので、俺がGitを勉強していて「これは超便利」と感じたものをTIPS的にまとめておくことにする。

git add -p

↓こんな感じで起動する。

$ git add [ファイルパス] -p

で、何が出来るのかっていうと、 これからコミットする変更内容を取捨選択したり、編集したりする ことができる。
たとえば、

diff --git a/git-add.md b/git-add.md
index 356ee59..dbf3428 100644
--- a/git-add.md
+++ b/git-add.md
@@ -1 +1,5 @@
 # git-add
+
+- add line-a
+- add line-b
+- add line-c

っていう変更があったとして、通常なら全部コミットするか、vimで開いて編集して別のコンソールでコミットした後、編集をロールバックするとか、そういうアナログな感じのことをやらなきゃいけないし、実際俺も最初の頃はそうしていた。
ところがどっこい、Gitにはちゃんとそれを回避する方法がある。

試しにgit add . -pしてみよう。すると、以下のように表示されるはずだ。

diff --git a/git-add.md b/git-add.md
index 356ee59..dbf3428 100644
--- a/git-add.md
+++ b/git-add.md
@@ -1 +1,5 @@
 # git-add
+
+- add line-a
+- add line-b
+- add line-c
Stage this hunk [y,n,q,a,d,/,e,?]? 

この時?と入力してReturnすることで、簡易的なヘルプを見ることができる。今回は真ん中の- add line-bだけをコミットしたかったと仮定する。どうするかというと、おもむろにeと入力してReturnするのだ。
すると、突然エディタが立ち上がる。俺の環境だとVimだ。

  1 # Manual hunk edit mode -- see bottom for a quick guide
  2 @@ -1 +1,5 @@
  3  # git-add
  4 +
  5 +- add line-a
  6 +- add line-b
  7 +- add line-c
  8 # ---
  9 # To remove '-' lines, make them ' ' lines (context).
 10 # To remove '+' lines, delete them.
 11 # Lines starting with # will be removed.
 12 #
 13 # If the patch applies cleanly, the edited hunk will immediately be
 14 # marked for staging. If it does not apply cleanly, you will be given
 15 # an opportunity to edit again. If all lines of the hunk are removed,
 16 # then the edit is aborted and the hunk is left unchanged.

この状態で例えば5行目と7行目を削除して、保存してみる。すると、おもむろにgit-addを抜けて、通常のコンソールに戻るはずだ。そして、改めてgit diff --cachedを覗いてみよう。

diff --git a/git-add.md b/git-add.md
index 356ee59..577a4b4 100644
--- a/git-add.md
+++ b/git-add.md
@@ -1 +1,3 @@
 # git-add
+
+- add line-b

なんと、さっき消した2つの行が消えているではないか!
じゃぁどこに消えたのか?安心して欲しい、ちゃんと編集内容は残っている。git diffを見てみよう。

diff --git a/git-add.md b/git-add.md
index 577a4b4..dbf3428 100644
--- a/git-add.md
+++ b/git-add.md
@@ -1,3 +1,5 @@
 # git-add

+- add line-a
 - add line-b
+- add line-c

つまり、さきほどeでやったことは、 これからコミットしたいものだけを残して保存することで、それらだけを Changes to be committed にする ということだったのだ。
この業を上手く使いこなせば、コミットの効率が飛躍的に伸びるはずだ。

(後大事なのは、Gitを使いこなしてる感があって「俺SUGEEEEE」できるという自己満足に浸れるという点である)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
186