Git のインタラクティブステージングとは?

こんにちは。ゆうせいです。

「コミットの粒度を適切にしたい!」 と思っても、実際には「複数の変更が入り混じってしまっている…」なんてこと、よくあるよね。
たとえば、「バグ修正と新機能追加を分けてコミットしたいけど、同じファイルに変更を入れてしまった…!」 みたいな状況。

そんなときに役立つのが、「インタラクティブステージング(git add -p)」 だよ!


インタラクティブステージングとは?

インタラクティブステージングとは、ファイルの変更の一部だけを選んでステージング(コミット準備)できる機能 のこと。
通常の git add .git add ファイル名 では、ファイル全体をステージングするけど、git add -p を使うと、変更の「塊(ハンク)」ごとに追加するかどうか選べる よ!


git add -p の基本的な使い方

1. インタラクティブステージングを開始

git add -p

もしくは、特定のファイルだけインタラクティブにステージングしたい場合は:

git add -p ファイル名

2. 変更の「塊(ハンク)」ごとに操作を選ぶ

コマンドを実行すると、Git が変更部分(ハンク)を表示してくれる。

例:変更が入ったコード

diff --git a/index.js b/index.js
index 1234567..89abcde 100644
--- a/index.js
+++ b/index.js
@@ -5,6 +5,7 @@ function login() {
   console.log("User login");
+  console.log("New debug log"); // デバッグ用のログ追加
   authenticateUser();
 }

このとき、次のような選択肢が表示される:

Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]?

ここで、次のキーを使ってどうするか選べるよ!

キー意味
yこの変更をステージングする
nこの変更をスキップ(ステージングしない)
q途中でやめる
a以降の変更をすべてステージングする
d以降の変更をすべてスキップする
j次のハンクに進む
J前のハンクに戻る
eこの変更を手動で編集する
?ヘルプを表示する

3. 適切な粒度でステージングし、コミットする

git add -p を使えば、「デバッグログの追加はコミットに含めたくない」という場合に n を押せばスキップできる!
あとは、通常通り git commit すれば、必要な変更だけがコミットされる。

git commit -m "Fix login function"


git add -p を使うメリット

  1. コミットの粒度をコントロールできる
    • 不要な変更やデバッグ用のコードを間違えてコミットしなくなる!
  2. 「関係のない変更」を分けてコミットできる
    • 例:「バグ修正」と「機能追加」を、同じファイルに変更を加えてしまった場合でも、それぞれ別のコミットに分けられる!
  3. コミット履歴が分かりやすくなる
    • 後で履歴を見たときに、「このコミットで何をしたのか」が明確になる!

もっと細かく選択する方法(手動編集モード)

もし「一部分だけステージングしたい」場合は、e(edit)を使うと手動で変更を編集できる!

例えば、次の変更があったとする:

 function login() {
   console.log("User login");
+  console.log("New debug log"); // デバッグ用のログ追加
   authenticateUser();
 }

ここで e を選ぶと、エディターが開く。

--- a/index.js
+++ b/index.js
@@ -5,6 +5,7 @@ function login() {
   console.log("User login");
+  console.log("New debug log"); // デバッグ用のログ追加
   authenticateUser();
 }

このとき、不要な行を - をつけて削除すると、それがコミットから外れるよ!

--- a/index.js
+++ b/index.js
@@ -5,6 +5,7 @@ function login() {
   console.log("User login");
-  console.log("New debug log"); // デバッグ用のログ追加
   authenticateUser();
 }

編集を保存すれば、デバッグログを除いた変更だけがステージングされる!


まとめ:git add -p の使いどころ

デバッグログを含めたくないとき
異なる種類の変更を別コミットにしたいとき
誤って不要な変更を加えてしまったとき

これを習慣にすると、「適切な粒度のコミット」 ができるようになるよ!
ぜひ git add -p を試してみて、きれいな Git 履歴を作ってみよう! 🚀

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。