git add -p を使ってパッチをステージする

2026/07/26 0:44

git add -p を使ってパッチをステージする

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

クリーンなバージョン履歴を維持するための最も重要なツールは、

git add -p
コマンドであり、このコマンドによりファイルの変更に対してインタラクティブなハンクレベルでのステージングが可能になります。通常のステージングとは異なり、この機能ではレビューアや開発者が特定のコードセグメント(「ハUNK」または変更のブロックと呼ばれる)を検査し、無関係な変更を無視しながらコミットに選択的に追加することができます。実行中、インターフェースは差分を表示し、
[y,n,q,a,d,s,e,?]
などのオプションでステージング、破棄、分割、編集、全変更の追加、終了、または拡張ヘルプ表示(
?
)を提示します。その後、
git status
を実行することで、変更が正しくステージ済み領域と非ステージ済み領域に分配されていることを確認できます。この粒状なアプローチは、大規模なファイル内部に存在するバグやタイプミスを偶然コミットに含めるのを防ぎ、コミットを焦点を当てた状態かつ整理されたものに保つことを保証します。履歴の基準がある既存のファイルに対しては有効ですが、差分比較点が欠落している全く新しいファイルについてはあまり有用ではありません。もしユーザーが偶然内容をステージしてしまう場合、
git restore --staged <file>
を使用して直ちにその動作を逆転させることができます。ハUNK を分割したり早期に終了したりすることで、開発者はリポジトリの整合性に対して正確な制御を得ることができ、コラボレーションがより円滑になり、時間の経過とともにコード管理も大幅に容易になります。稀なケースとして、ユーザーが全体ディレクトリをコミットし、その内容について確信がある場合、インタラクティブなステージングよりも標準的な
git add
のアプローチの方が好まれる可能性があります。

本文

Git の
add -p
でインタラクティブなステージングを行う方法

既に

git add -p
を活用してコミットのステージングを行っている場合を除き、その機会を逃している可能性があります。このコマンドはファイルを全体ではなく部分的にインタラクティブにステージングすることを可能にし、Git コミットプロセスへの制御性を格段に高めます

なぜ
git add -p
を使うべきか?

ワークフローで

git add -p
を好んで使用する主な理由は以下の通りです。

  • ミス発見: ファイルを変更する最中に差分を確認でき、多くのミスを早期に発見できます。
  • バグ防止: コミット前のレビューにより、コーディングや作成初期で見逃されがちなバグ・スペルミスを未然に防げます。
  • 部分ステージング: Git は変更箇所を「ハंक(hunk)」と呼びますが、特定のハंकだけをステージングしてコミットできます。
  • コミットの整理化: 複数の変更点を別々のコミットへグループ化したい場合に特におすすめです。関連する変更があっても個別に選択し、クリーンで構造化されたコミットを実現できます。

ファイルの一部をステージングする方法

以下のように変更内容(diff)が表示され、「このハंकをステージしますか?」と促されます。

diff --git a/main.mts b/main.mts
index e1132f2..8f7c279 100644
--- a/main.mts
+++ b/main.mts
@@ -1,2 +1,4 @@
  export const add = (a, b) => a + b
+export const div = (a, b) => a / b
  export const sum = (xs) => xs.reduce((acc, x) => sum(acc, x))
+export const avg = (xs) => div(sum(xs), xs.length)

プロンプトには

(1/1) Stage this hunk [y,n,q,a,d,s,e,]?
と表示されます。

基本的な操作

  • ステージング:
    y
    を入力
  • 非ステージング:
    n
    を入力

本例では

avg
関数はまだコミット準備ができていませんが、
div
関数だけプッシュしたいため、「ハंकを分割する」 (
s
) を選択します。Git は次のように問いかけます。

Split into 2 hunks.
@@ -1,2 +1,3 @@
  export const add = (a, b) => a + b
+export const div = (a, b) => a / b
  export const sum = (xs) => xs.reduce((acc, x) => sum(acc, x))

次にプロンプト

(1/2)
が表示されるため、
div
関数をコミットするため
y
を入力します。Git は残りのハंकを表示します。

@@ -2 +3,2 @@
  export const sum = (xs) => xs.reduce((acc, x) => sum(acc, x))
+export const avg = (xs) => div(sum(xs), xs.length)

最後にプロンプト

(2/2)
が表示されるので、
div
のみで終了したい場合は
q
を入力しインタラクティブな対話を終えます。その後、必要に応じて
git commit
を実行します。

動作の確認

git status
で確認すると、ファイル
main.mts
は以下の両方に表示されます。

  • Changes to be committed (コミット対象)
  • Changes not staged for commit (コミット前のステータス変更)

これは、ファイルの一部のみをステージングしたための意図した動作です。

On branch main
Your branch is ahead of 'origin/main' by 1 commit.

Changes to be committed:
	modified:   main.mts

Changes not staged for commit:
	modified:   main.mts

これにより、次のコミットに向けた単一のハंक(パッチ)を成功裏に準備できました。

その他のオプションプロンプト

表示される応答リスト

[y,n,q,a,d,s,e,?]
は短縮表示ですが、
?
を入力することで詳細なヘルプが得られます。主な機能は以下の通りです。

キー機能
yこのハंकをステージする
nこのハंकをステージしない
aファイルの残りのすべてのハंकも合わせて一度にステージする
dハンク(およびその後のもの)をステージしない
g選択し、移動する (Move)
/**指定した正規表現で検索
j次の待機中のハंकへ移動
J次のハンクへ移動
k前の待機中のハンクへ移動
K前のすべてのハンクを表示
s現在のハンを分割する
e手動で編集 (Edit)
?ヘルプを表示

使用しないケース

ほぼ毎日

git add -p
を使用していますが、以下の場合は通常通り別の方法を使います。

  1. 新規作成されたファイルの場合
    • 以前の実装がないため差分を比較する元が存在しません。
    • したがって承認用の差分が表示できず、使えません。
  2. ディレクトリ全体をコミットする場合
    • 自信がある場合は
      git add <directory>
      の標準アプローチを採用します。
    • ただし、微調整や特定のカラム制御が必要な場合は、あえて
      git add -p
      を使用することもあります。

まとめ

ワークフローに

git add -p
を取り入れることで、Git のコミットプロセスをスムーズかつ正確に管理できます。私は変更セットをコミットする際、このテクニックをほぼ毎回使用しています。

この方法を使えば:

  • コミット対象となるコードを容易に見直す(レビュー)
  • 各コミットに含まれる内容を正確に制御できる

同じ日のほかのニュース

一覧に戻る →

2026/07/30 5:39

Vision Pro の最もクールな活用法

## Japanese Translation: 著者は、無料ツールと AI を活用し、標準的な建築設計ソフトを凌駕するために Apple Vision Pro 上で 2D の住宅施工図面を VR で視覚化するための DIY ワークフローの詳細を提供している。このプロセスでは、Fusion 360 を用いて PDF 図面を高精度な 3D モデルに変換し( Appearance パネルを通じて木材、石材、ガラスなどのテクスチャを追加)、家具は GLB または USDZ ファイルを OBJ フォーマットへ変換して読み込む(Tampermonkey スクリプトを用いるか、代替的な iOS AirDrop ワークフローを使用する)ことで行う。さらに、AI を活用した「vibe coding」により、1 つの朝に独自のカスタムビューアアプリ「Prospector」を開発し、コントローラーサポート、フライトモード、6 倍速度モード、森の天空ボックスのような没入型環境などの機能を付与している。生成されたコードは不完全であること(「janky」と表現)も認められているが、完全に機能する。このアプローチは、建築家から通常提供される Revit ウォークスルー unfavorably に比較できるような、個別の建設者に向けた浸透的な視点を可能にしている。

2026/07/30 0:05

Show HN: 任意の M シリーズ Mac で、Gemma 4 26B を 2 GB のメモリで動かすオープンソースエンジン

## Japanese Translation: TurboFieldfare は、macOS 26 (arm64)、Metal 4 および Swift 6.2 を想定した独立系 Apache 2.0 ライセンス下のプロジェクトであり、Apple Silicon搭載の Mac で指令チューニング済みの Gemma 4 26B-A4B モデル(~14.3 GB の共有コア)を動作することを可能にします。本プロジェクトは、SSD からオンデマンドでルーターの判断に基づいて追加の「エキスパート」ブロックをストリーミングする仕組みを採用し、共有重みと 1.35 GB の FP16 KV キャッシュをメモリ上に保持することで、利用可能な RAM が~2 GBしかないデバイスでも実行できるようにしています。MLX または llama.cpp を使用せず、独自のスウィフト+メタルランタイムによりこれを実現します。ベンチマークでは、8 GB M2 MacBook Air でデコード速度が 5.1~6.3 トークン/秒、24 GB M5 Pro では 31~35 トークン/秒を記録しました。インストールには、ピン付けされた~15 GB のモデルをダウンロードし、完全なソースチェックポイントを物質化することなく、~14.3 GB の.gturboディレクトリに再パッケージする必要があります。スイートには、テキストのみ推論で自動チャットフォーマットを持つ TurboFieldfareMac、TurboFieldfareCLI、機能ツール付きの OpenAI 互換ループバックサーバー(ただしクライアント側での認証が必要)、TurboFieldfareRepack およびサポートライブラリ・サービスが含まれます。生成デフォルトは温度 0.2、Top-K 64、Top-P 0.95 であり、確定的出力(温度 0)およびその他のサンプリングパラメータのオプションも用意されています。今後の作業としては、iPhone/iPad ネイティブアプリの開発と base 16 GB M4 Mac miniなど他のモデルでのさらなるベンチマークが対象です。本プロジェクトは Google によるアフィリエイトまたは推奨ではなく、モデル重みは Hugging Face から別途入手します。

2026/07/30 0:41

スーパーロジカル

## Japanese Translation: 本プロジェクトは、インタラクティブ、自動、および運用ワークフローを単一の堅牢なセッション層に統合し、「すべての作業用のマルチプレキサー」を実質的に創出することを目的としています。このシステムは、完全にソフトウェア主導である一方で、デフォルトのコンテキストの提供、構造化されたデータへのアクセス、履歴の保存、そして完全な人間の制御を最優先します。ターミナルは開発者、エージェント、ツール、およびインフラストラクチャを本質的に効果的に接続するため、理想的な基盤となります。複数のターミナルブロックを長寿セッションとして組織化することで、デバイス間でのシームレスな再接続と、スクロールや選択機能に対するネイティブなサポートを提供します。 チームは HashiCorp や Vercel といった主要企業の広範な経験を持ち、Mitchell Hashimoto(Ghostty の創始者)、Jack Pearkes、Alasdair Monk、Hector Simpson を含む主要な人物によって率いられています。本製品は最初にはるかに素晴らしいマルチプレキサーを構築することに焦点を当て、その後で構造化可能なアーキテクチャと運用安全性を優先します。ベータ版利用の告知が後日に予定されており、将来的にオープンソースリリースも行われる見込みです。ユーザーは、Web とネイティブ macOS/iOS プラットフォーム間でライブセッションを共有できる統合されたワークスペースを利用できるようになります。このアプローチは、追加のソフトウェア層が必要なく、自動化と直接的な人間のインタラクションの双方をサポートする単一のシステムを提供することで、開発者がツールを管理する方法を変革します。**プロジェクトは現在資金調達が完了しています。**

git add -p を使ってパッチをステージする | そっか~ニュース