includeGitInstructionsでGit指示の自動挿入を止める
settings.jsonのincludeGitInstructionsで組み込みのコミット/PR手順とgitステータスをシステムプロンプトから外す設定と、CLAUDE.mdでの置き換え方をまとめます。
Claude Codeは、コミット作成とPR作成の手順、それにgitのステータス情報を、会話の最初からClaudeに渡しています。includeGitInstructionsはこの2つをまとめて止める設定キーです。既定値はtrueで、falseにすると両方が消えます。コミット規約やPRテンプレートをすでに持っているチームが、Claude側の既定手順と自前の規約を衝突させないために使います。既定のままgh pr createまで任せる場合はClaude CodeでPRを作成する手順を先に見てください。
2つの情報はどこに入っているか
Claude Codeが渡すgit関連の情報は2種類あり、置き場所が違います。
includeGitInstructionsが外すもの
組み込みの手順
コミットとPRの書き方の指示です。Claudeがgitを操作するときの「既定のやり方」にあたります。
gitステータスのスナップショット
現在のブランチ、メインブランチ、git statusの出力、直近のコミットが入ります。クラウドセッションには、trueでもスナップショットは含まれません。
falseにしても、Claudeがgitコマンドを実行できなくなるわけではありません。変わるのは、手順書とスナップショットが最初から渡されるかどうかだけです。
{
"includeGitInstructions": false
}置ける場所は、ユーザー設定・プロジェクト設定・ローカル設定・managed settingsのどれでもかまいません(リファレンスでのスコープはAny file)。
環境変数との優先順位
同じ挙動を環境変数でも制御できます。CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONSは、設定するとincludeGitInstructionsより優先されます。
{
"env": {
"CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS": "1"
}
}設定ファイルで固定したいなら上のようにenvブロックに書きます。シェルからCLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS=1 claudeのように起動すれば、settings.jsonを触らずに1セッションだけ切り替えられます。settings.json側がtrueのままでも、環境変数があればgit指示は抑制されます。
この設定には2回の節目があります。v2.1.69でincludeGitInstructionsと環境変数が同時に追加され、v2.1.78でgitステータスの節が消えない不具合が直りました。v2.1.78の修正文は「falseでもシステムプロンプトのgitステータスの節が抑制されない」不具合を直したものです。つまりv2.1.69から2.1.77のあいだは、falseにしても会話の最初にgitステータスが残る不具合がありました。「手順は消えたのにブランチ名が見える」ときは、まずclaude --versionでバージョンを確認してください。
v2.1.287で、モデル呼び出しもログインもせずに確かめられる範囲を見ました。空のホームディレクトリと空の設定ディレクトリ(HOMEとCLAUDE_CONFIG_DIR)に差し替えてclaude --helpを実行すると、設定を読み込む入口が2つ並びます。--settings <file-or-json>はJSONファイルまたはJSON文字列から追加の設定を読み、--setting-sources <sources>は読み込む設定源をuser・project・localの中から選びます。
自前のGitワークフローに差し替える
falseが最も効くのは、既定手順をただ消すのではなく、チームの手順に置き換えるときです。CLAUDE.mdは@path/to/fileで別のファイルを取り込めるので、git規約だけを独立したドキュメントにしておけます。
既定手順をチームの規約に差し替える
- 1
規約ファイルを書く
docs/git-instructions.mdに、コミットメッセージの形式やブランチ名のルールを普通のMarkdownで書きます。 - 2
CLAUDE.mdから取り込む
CLAUDE.mdに
@docs/git-instructions.mdの行を置きます。相対パスは作業ディレクトリではなく、取り込む側のファイルを起点に解決されます。再帰的な取り込みは4 hopまでです。パスに空白を含むときは\でエスケープし、コードスパンやコードブロックの中の@は取り込まれません。 - 3
既定手順を止める
.claude/settings.jsonに"includeGitInstructions": falseを書きます。
CLAUDE.md側の記述は次のようになります。
# Additional Instructions
- git workflow @docs/git-instructions.mddocs/git-instructions.mdの中身の例です。
# Gitワークフロー規約
- コミットメッセージは `<type>: <日本語で簡潔に>` の形式(type は add/update/fix/refactor/docs から選ぶ)
- 本文2行目以降は箇条書きのみ、署名・フッターは付けない
- ブランチ名は `feat/yymmdd-短い説明` の形式で、必ず main から切る公式のメモリのページも、CLAUDE.mdに書いたコミット・PRの規則が思ったとおりに効かないときの確認点として、この組み合わせを挙げています。Claude Code自身が加える手順と競合していないかを見て、競合するならincludeGitInstructionsで組み込み側を止め、署名の文面はattributionで決める、という流れです。
個人用の規約をworktreeでも使いたいとき
チームの規約は共有できても、「自分だけこの書き方にしたい」という個人ルールは置き場所に迷います。プロジェクトルートにCLAUDE.local.mdを作れば、CLAUDE.mdと並んで読み込まれ、.gitignoreに入れればコミットされません。
ただし.gitignore済みのCLAUDE.local.mdは、作ったworktreeにしか存在しません。複数のworktreeを行き来する人は、ホームディレクトリのファイルを@~/.claude/my-project-instructions.mdのように取り込む形にすると、どのworktreeでも同じ個人ルールが載ります。この取り込みは外部インポートなので、そのプロジェクトで初めて出会ったときに承認ダイアログが出ます。拒否すると取り込みは無効のままで、ダイアログは再表示されません。リポジトリ内のdocs/git-instructions.mdのようなファイルを取り込む場合は、ダイアログは出ません。
バックグラウンドセッションも、v2.1.221からCLAUDE.mdのgit指示に従ってコミットとプッシュを行います。自前の規約をCLAUDE.mdに置いておけば、バックグラウンドの作業にも同じ規約が及びます。
いつfalseにするか
| 状況 | 設定 | 理由 |
|---|---|---|
| コミット規約・PRテンプレートを独自に持っている(Conventional Commitsなど外部標準を含む) | 設定false + CLAUDE.mdで置き換え | 理由既定手順との重複・矛盾を避けられる |
| gitワークフローに特にこだわりがない | 設定true(既定のまま) | 理由変更コストに見合うメリットが薄い |
| skillやプラグインで独自のgit操作を提供している | 設定false | 理由既定指示とskillの手順が二重に競合しない |
ヘッドレス実行(-p)やCIでは、settings.jsonを変えられないジョブでも、環境変数CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS=1を足すだけで同じ状態にできます。
設定したのに規約が効かないとき
コミットメッセージの書き方が変わらない場合は、原因の一つは、falseにしただけで置き換え先を渡していないことです。既定の指示を消すと「指示が何もない」状態になるだけで、望みの規約は自動では入りません。上の手順の2番目、@による取り込みが必要です。
取り込みが効いているかは、セッション内で/contextを実行し、Memory filesの一覧にCLAUDE.mdや規約ファイルが載っているかで確かめられます。一覧に無いファイルは、Claudeには見えていません。
読み込まれているのに効かないときは、書き方と置き場所を見直します。「コードをきれいに整形する」より「インデントは2スペース」のように具体的に書いた指示のほうが効きます。複数のCLAUDE.mdが同じ挙動に別の指示を出していると、Claudeがどちらかを任意に選ぶことがあります。読み込まれた全ファイルは上書きされず連結され、ファイルシステムのルートに近いものから作業ディレクトリに近いものの順に並びます。同じ階層ではCLAUDE.local.mdがCLAUDE.mdの後ろに付くので、個人用の指示が最後に読まれます。
システムプロンプトの水準で指示を足したい場合は、起動時に--append-system-promptを渡す方法もあります。起動時に渡す形なので、対話での利用よりスクリプトや自動化に向きます。
もう一つの勘違いは、git関連の権限プロンプトが減ると思い込むことです。このキーが触るのはClaudeに渡す情報だけです。確認プロンプトを減らしたいなら、permissionsの許可ルールで制御します。
また、コミットの前に必ず実行したい処理は、CLAUDE.mdの文章ではなくhookに書くよう、公式のメモリのページは案内しています。hookはシェルコマンドとして決まったタイミングで走り、Claudeがどう判断するかに左右されません。
署名とoutput styleは別のキー
includeGitInstructionsと取り違えやすい設定が2つあります。
混同しやすい2つの設定
attribution
コミットのトレーラーとPR本文の署名を決めるキーです。
falseにすると署名をすべて消せます(v2.1.281以降。それより前のバージョンはfalseを受け付けず、その設定ファイルごと読み飛ばします)。古いバージョンも使う設定ファイルでは、commitとprを空文字にし、sessionUrlをfalseにします。keep-coding-instructions
カスタムoutput styleのフロントマターです。変更範囲の絞り方・コメントの書き方・検証手順といったソフトウェアエンジニアリング全般の組み込み指示を、残すかどうかを決めます。既定は
falseで、カスタムoutput styleでは外れます。
古いバージョンと共有する設定ファイルでは、署名を消す設定を次のように書きます。
{
"attribution": {
"commit": "",
"pr": "",
"sessionUrl": false
}
}attributionには、CLAUDE.mdやメモリに書いた自分の指示のほうが、コミットとPRの署名行より優先されるとClaudeに伝わる仕様があります。ただしmanaged settingsで設定した署名行は例外です。
output styleを作る手順では、Claudeがソフトウェアエンジニアリングをしないスタイルならこのキーを書かずに外しておくよう案内されています。コミュニケーションの仕方だけを変えて、コーディングの挙動は今のままにしたいときにkeep-coding-instructions: trueを付けます。output styleが効くのはメインの会話とフォーク(親の会話履歴とシステムプロンプトを引き継ぐ分岐)で、それ以外のサブエージェントは独自のシステムプロンプトで動くため、スタイルの影響を受けません。
まとめ
includeGitInstructions: falseは、置き換え先の規約をCLAUDE.mdから取り込んだ状態で使うと効果が出ます。settings.jsonの他のキーはClaude Code設定ガイド、CLAUDE.mdの設計はClaude CodeのCLAUDE.mdを実用に引き上げる10のパターンにあります。