鹿島です。一番好きな Git コマンドは git add -p です。
軽い内容なので、厨二っぽい技術系ブログとかの自己紹介風のタイトルにしてみた。
git add -p とは
ggrks とか ChatGPT に聞いてくれとか書きかけたけど、一応簡単に説明する。
説明不要だとは思うが、 git add
の基本的な使い方としては以下の通り。
git add path/to/file_to_add
指定されたファイルの変更点が staging area に移され、その後、git commit
でコミットされる。
それに対して -p
を指定すると、以下のように変更点を1つ1つ staging area に移して良いか聞いてくる。
kashima$ git add -p
diff --git a/core/includes/classes/class-wp-rag-ab-sync-service.php b/core/includes/classes/class-wp-rag-ab-sync-service.php
index f453311..49741a0 100644
--- a/core/includes/classes/class-wp-rag-ab-sync-service.php
+++ b/core/includes/classes/class-wp-rag-ab-sync-service.php
@@ -128,7 +128,7 @@ class Wp_Rag_Ab_SyncService {
* Send the post to Bedrock. If the post is already in Bedrock, update it.
*
* @param WP_Post $post post object.
- * @return void
+ * @return bool
*/
public function send_post_to_bedrock( WP_Post $post ) {
$client = WPRAGAB()->helpers->get_bedrock_client();
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,p,?]?

何が良いか
関連する変更だけを1つのコミットにする事ができる
ソフトウェア開発者ならコードレビューで、1つの PR に複数の内容を入れるな、という指摘を1度は受けた事があると思う。それに比べると頻度は少ないかもしれないけど、1つのコミットに複数の内容を入れるな、というのも一般的な指摘事項だと思う。
でも、実際に開発をしていると
- A という機能を実装しよう
- あ、A から呼び出す C1 クラスの M1 メソッドの引数の型を変更した方が良いな
- M1 メソッドを変更するなら、M2 メソッドから M1 を呼び出している部分も変えよう
- C1 クラスの子クラスの C2 クラスも変えないと
- C2 クラスを呼び出している C3 クラスも変えよう
- :
- :
という形で大量のファイルが同時に修正されている状態になる事がよくある。
そういうときに、 git add -p
で関連するものだけを add してコミット、を何度か繰り返す事で、後から見て分かりやすいコミット履歴が出来る。
これは、まぁわかりやすいメリットだと思う。
仕事が進んでいる感じがする
git add -p
& git commit
を実行して小さいながらも完結した内容のコミットが積み重なる事で、仕事が進んでいる感じがすると思う。大量のファイルが同時に修正されているけどコミットが1つも無い状態と比べれば違いは歴然だと思う。
仕事というのは小さな事の積み重ねなので、「進んでいる感じがする」ではなく「進んでいる」と言い切っても良い。
やるべき事が明確になる
「git add -p を使うとやるべき事が明確になる」だけだと、??と思ったかもしれないので説明する。
前々項の「大量のファイルが同時に修正されている状態」から、「git add -p
で関連するものだけを add してコミット、を何度か繰り返す」と、コミット出来ていない修正個所が徐々に少なくなる。そうすると、その残った部分は未完成のコードという事が分かるので、結果としてやるべき事が明確になる。
完成している部分と完成していない部分を分ける事により、完成していない部分に集中でき、その結果仕事の効率も上がる、というのが要点。
以上、git add -p の良い点を3つ紹介した。
関連する便利サブコマンド・オプション
ここでは git add -p
に関連する便利なサブコマンド、オプションを紹介する。これについては ChatGPT に聞いてみた回答をそのまま載せる。(私にとっては知っているのもあれば知らないものもあった。)
とりあえず列挙だけするので、知らないものがあれば詳しくは自分で調べて欲しい。
- git commit –fixup= + git rebase -i –autosquash
- git stash push -p
- git restore -p
- git diff –cached / git diff –staged
- git worktree
まとめ
ソフトウエア開発ではトップダウンとボトムアップの両方向で考えていく・進めていく事が多い。アーキテクチャの設計とかはトップダウンだけど、個別の機能の開発はボトムアップが多い、のような。
ボトムアップで色々なファイルをあれこれ考えながらいじってくうちに、コードの方向性がまとまるという事も多いと思うけど、そういう時に git add -p
を使って確定した部分からコミットにしていく事で、やるべき事が明確になって集中できると思う。
コメントを残す