Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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」できるという自己満足に浸れるという点である)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした