GitHub CopilotとClaude Code:AIでコードを書くときのGitの使い方

公開 更新 書いた人 大林 諒

GitHub CopilotやClaude Codeのようなコードを書くAIを使い始めると、変更の量が一気に増えます。料金表の数字を1つ頼んだだけなのに、別のファイルまで書き換わっていることもあります。そのときに何が変わったかを確かめて、まずければ戻せる状態を作るのがGitの役目です。

ここでは料金表の修正を例に、どの道具が何をするものかの整理、AIに頼むときの作業の流れ、AIが実行するコマンドで見るところ、鍵の扱いを順に見ます。読み終わると、コマンドを暗記していなくても、AIの変更を自分で確かめて受け入れるか戻すかを決められるようになります。

この記事の内容
  1. 先に答えると
  2. 3つの道具とGitの関係
  3. AIに直させるならGitが要る理由
  4. 作業の流れ
  5. AIがコマンドを実行するときに見るところ
  6. 鍵を渡さない、.env を読ませない
  7. AIが作ったコミットの見直し方
  8. Git自体をAIに頼む
  9. できないことと、その代わり
  10. よく詰まるところ
  11. 次に読む

先に答えると

AIの道具はコードを書くもの、Gitは変更の履歴を取るもの、GitHubはその履歴を預ける場所です。役割が違うので、どれか1つあれば他が要らなくなる関係ではありません。AIに直させるなら、作業の前に枝を分け、終わったら差分を見てからコミット(変更の保存)するだけで、失敗しても戻せるようになります。

  • GitHub CopilotはGitHubの製品ですが、GitHub本体のプランとは別の契約です。Claude CodeとCursorはGitHubの製品ではありません
  • Gitが要るのは、大きく変えられても戻せて、何が変わったかを差分で見られるからです
  • 流れは、枝を作る、AIに頼む、差分を見る、コミット、プルリクエスト(Pull Request、PR)の順です
  • git push --force、git reset --hard、rm、公開リポジトリへの送信は、実行前に必ず止めて確かめます
  • 鍵はAIの作業フォルダに置かず、.env も読ませません

3つの道具とGitの関係

言葉を先に分けます。Gitは変更の履歴を手元で記録する仕組みで、GitHubはその履歴を預けて共有するサービスです。リポジトリは履歴ごとのファイル一式を指します。AIの道具はどれも、ファイルの中身を書く側にいます。

名前何をするものか提供元料金(2026年11月時点・1ユーザー月)
GitHub Copilot入力の補完と、指示で複数のファイルを直す機能GitHubFree $0(月2,000補完)、Pro $10、Pro+ $39、Max $100
Claude Codeコードを読み、ファイルを直し、コマンドを実行するAnthropicPro $20(年払いなら$17)、Max $100、Team 1席$25(年払いなら$20)。Freeには含まれない
CursorAIが組み込まれたコード編集アプリCursorFree $0、Plus $8、Premium $30、Teams $30から
Git変更の履歴を記録するオープンソース無料
GitHub履歴を預けて共有するGitHubFree $0、Team $4、Enterprise $21

Copilotの料金は個人向けで、会社で使うBusinessの価格は料金ページに出ていません。GitHub Enterpriseには Copilot の利用が含まれるという記載があります。含まれるのは利用の権利で、対象はアカウントチームを通じて契約する会社、利用枠は別で従量課金です。Enterpriseの会社はまず社内の契約を確かめます。一方、GitHubのFreeやTeamの会社は、GitHubの料金とは別に考えます。

サンプル料理教室のように、GitHubはFreeのままClaude Codeを使う組み合わせも問題なく成り立ちます。Claude Codeを使うのにGitHubのCopilotを契約する必要はなく、逆にCopilotを使うのにClaude Codeは要りません。

AIの道具、手元のGit、GitHubの3段の関係
AIの道具、手元のGit、GitHubの3段の関係

AIに直させるならGitが要る理由

理由は2つです。

1つ目は、戻せることです。AIは一度に複数のファイルを書き換えます。結果が気に入らなければ、コミットした時点へ戻せます。手作業の「menu_最新_修正2.html」のようなコピーは要りません。

2つ目は、差分で見られることです。差分はファイルの変更前と変更後の違いです。AIの「修正しました」という言葉だけでは、何を変えたのか分かりません。差分を見れば、変わった行が1行ずつ出ます。

Claude Codeには /rewind という巻き戻しの機能があり、ファイルの編集を会話の途中まで戻せます。便利ですが、公式も版管理の代わりではないとしています。コマンドで変わっただけのファイルは対象外で、長期の履歴や共同作業にはGitを使うようにと書かれています。

作業の流れ

料金表の「体験教室」を3,000円から3,500円に直す例です。

1. 枝を作る

ブランチ(枝)は、本番の main から分かれた作業用の流れです。AIに頼む前に分けておくと、失敗しても main は無傷です。

$ git switch -c fix-menu-price
Switched to a new branch 'fix-menu-price'

2. AIに頼む

「menu.html の体験教室の料金を3,500円に直して。他のファイルは変えないで」のように、対象と範囲を一緒に伝えます。

3. 差分を見る

ここが一番大事です。まず、どのファイルが変わったかを見ます。

$ git status --short
 M index.html
 M menu.html
 M style.css
$ git diff --stat
 index.html | 1 +
 menu.html  | 2 +-
 style.css  | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)

頼んだのは menu.html だけなのに、3つ変わっています。AIの変更ではよくある形です。次に、中身を見ます。

$ git diff menu.html
diff --git a/menu.html b/menu.html
index a368e33..9d79935 100644
--- a/menu.html
+++ b/menu.html
@@ -1,4 +1,4 @@
 <h1>料金表</h1>
-<p>体験教室 3,000円</p>
+<p>体験教室 3,500円</p>
 <p>月4回 15,000円</p>
 <p>夏の教室 5,000円</p>

- の行が消えた行、+ の行が足された行です。コマンドが苦手なら、GitHub DesktopやVS Codeの差分の画面でも同じものが色付きで見られます。

4. 要るものだけコミットする

git add は、次のコミットに入れるファイルを選ぶ操作です。頼んだものだけを選びます。

$ git add menu.html
$ git commit -m "料金表を修正"
$ git show --stat --format='%h %s' HEAD
7324906 料金表を修正

 menu.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

頼んでいない変更は git restore index.html style.css で捨てます。捨てると戻せないので、中身を見て要らないと決めたものだけにします。

5. 送って、プルリクエストにする

git push -u origin fix-menu-price で枝をGitHubに送り、プルリクエストを作ります。プルリクエストは、枝の変更を main に合流させてよいか確かめる場所です。GitHubの「Files changed」タブで全体の差分をもう一度読み、問題なければ合流させます。代表だけで運用していても、この画面で読み直す工程は省きません。

プルリクエストの Files changed で、変更の範囲を確かめる
プルリクエストの Files changed で、変更の範囲を確かめる

こまめに保存して、保存を自動にする考え方

AIとの作業は、会話の区切りごとにコミットするのが基本です。1回のコミットが小さいほど、戻す範囲も小さくなります。実際に運用していると、1時間分をまとめて1コミットにした日に限って、途中までは良かった変更を取り出せずに困ります。

慣れてきたら、会話の区切りごとに保存と送信を自動にする考え方もあります。Claude CodeにはHooksという、動作の前後に決めたコマンドを動かす機能があります。ただし自動にするなら条件が3つあります。

  • 作業用の枝でだけ動かし、main には送らない
  • .gitignore(Gitの対象から外すファイルの一覧)に .env を入れてから始める
  • 細かいコミットが並ぶ前提で、最後はプルリクエストの全体の差分で読む

AIがコマンドを実行するときに見るところ

Claude Codeのように自分でコマンドを動かせる道具は、設定によって確認の出方が変わります。Claude Codeは、ターミナルとVS Codeの対話で最近の版を使うとAuto modeから始まります(2026年11月時点。claude -p、Agent SDK、管理者が無効にした環境などはManual modeです)。Auto modeは毎回人に聞く代わりに別のモデルが審査し、危ないと判断したものを止めます。強制pushも既定で止める対象です。毎回聞いてほしいときはManual modeに切り替えます(ターミナルなら Shift+Tab)。

許可の画面が出たら、そこに書かれているコマンドを読みます。公式も、承認の前に確かめるのは利用者の責任だと書いています。全部を読む必要はありません。次の語が出たら手を止めます。

出てきた語何が起きるか見るところ
git push --force、-fGitHub側の履歴を手元の内容で上書きする本当に必要か。main に対してなら断る
git reset --hardコミットしていない変更を捨てる残したい変更がないか git status で先に見る
git clean -fGitで管理していないファイルを消すgit clean -n で消える対象を先に見る
rm、rm -rfファイルを消すコミットしていないファイルは戻らない
git add -A、git add .変更をまとめて選ぶ.env や関係ないファイルが入らないか
git add -f.gitignore を無視して入れる.env が対象なら断る
gh repo create --public公開リポジトリを作る公開でよいものか
gh repo edit --visibility公開範囲を変える非公開から公開にしていないか
git push の送り先リポジトリと枝を決める公開リポジトリや他社のリポジトリに送っていないか

git push --force の怖さは、手元で試すとよく分かります。外注エンジニアBの変更がGitHubにある状態で、代表が古い状態から作業して送ると、普通のpushは断られます。

$ git push origin main
 ! [rejected]        main -> main (non-fast-forward)

ここでAIが「--force で送ります」と言ってきたら、断るところです。実行すると通ってしまいます。

$ git push --force origin main
 + 7d0d573...a7207b2 main -> main (forced update)

7d0d573 がBの変更で、GitHub側の履歴からは消えました。断られたときの正解は、git pull で相手の変更を取り込んでから送り直すことです。

rm も同じです。コミット済みのファイルは消しても戻せますが、コミット前のファイルは戻りません。images/ フォルダを消して戻すと、コミット済みの logo.png だけが戻り、作りかけの summer.png は消えたままでした。

$ rm -rf images
$ git status --short
 D images/logo.png
$ git restore images
$ ls images
logo.png
Claude Codeが危ないコマンドの前に出す確認
Claude Codeが危ないコマンドの前に出す確認

道具の側とGitHubの側で止める

Claude Codeでは、設定ファイル .claude/settings.json の permissions で、止めるコマンド(deny)や必ず聞くコマンド(ask)を決められます。ask に Bash(git push *) を入れておくと、Auto modeでも送る前に確認が出ます。ただし公式も、書いた通りの形にしか当たらないと注意しています。git -C . push のような別の書き方には効きません。

確実なのはGitHub側で止めることです。保護ブランチ(枝を守る設定)を main に付けると、既定で強制pushが止まります。Freeの非公開リポジトリでは使えず、ProかTeam以上で使えます(2026年11月時点)。Freeのままなら、道具の設定と目視で止めることになります。

鍵を渡さない、.env を読ませない

AIに読ませた内容は、各社のサーバーへ送られる前提で考えます。パスワードやAPIキーが入った .env は読ませません。頼むときに、チャットへ鍵を貼らないのも同じ理由です。

ファイルを読ませない設定は道具ごとにあります。

道具読ませない設定公式の注意
Claude Codepermissions.deny に Read(./.env)cat などには効くが、ファイル名を指定しない grep -r のような読み方や、Pythonなどのスクリプトからの読み取りには効かない
GitHub Copilot「Content exclusion」の設定(Copilot Business・Enterpriseの機能。リポジトリや組織の管理者が設定する)間接的な読み取りは検知できないことがある。OSの権限の代わりにはならない
Cursor.cursorignore完全な保護は保証されない。ターミナルからの読み取りは止められない

Claude Codeの設定は次の形です。

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)"
    ]
  }
}

どの道具にも抜け道があるので、設定は補助です。本番の鍵はパスワード管理ツールに置き、AIが作業するフォルダには試験用の値だけを置くのが一番確実です。

非公開でも、何が渡るかは規約で確かめる

GitHubのリポジトリが非公開でも、AIの道具にファイルを読ませれば、その道具の提供元には内容が届きます。リポジトリの公開範囲と、AIの道具のデータの扱いは別の話です。

道具とプラン学習への利用(2026年11月時点の公式の記載)
Copilot Free・Pro・Pro+・Max入力や提案、コード片が学習に使われることがある。設定で止められる
Copilot Business・Enterpriseデータ保護契約(DPA)のもとで扱う
Claude Code(Free・Pro・Max・Ultraの契約)利用者の設定で決まる。許可すると学習に使われ保存は5年、許可しないと保存は30日
Claude Code(Team・Enterprise・API)既定では学習に使わない。保存は標準で30日

個人向けの契約を仕事に使うなら、最初にこの設定を見ます。顧客の情報が入るリポジトリを扱うなら、会社向けのプランと規約を読んでから使います。Cursorも含め、規約は変わるので、契約の前に各社の最新の文面で確かめます。

AIが作ったコミットの見直し方

AIにコミットまで任せたときは、後からでもまとめて確かめられます。

見るところ理由
メッセージと変わったファイルが合っているか違っていると、後で探せず戻す範囲も誤る
頼んでいないファイルが入っていないかついでの修正が混ざりやすい
消された行に要るものがないか- の行は見落としやすい
変更の量が頼んだ内容に見合うか1行の修正で数百行変わっていたら疑う
知らないライブラリが増えていないか依存先が増えると保守の負担も増える
鍵やメールアドレスが書かれていないか履歴に残ると消すのが大変
実際に動かしたか画面で開いて確かめるまでは完了ではない

コミットメッセージを任せるときは、AIの要約をそのまま信じないようにします。次はメッセージは料金表なのに、変わったのは style.css だけという例です。

$ git show --stat --format='%h %s' HEAD
93ae85c 料金表を修正

 style.css | 1 +
 1 file changed, 1 insertion(+)

まだ送っていなければ、git commit --amend -m "style.cssの見出しの色を修正" で書き直せます。AIには「日本語で、何を変えたかが分かる1行で。変更していないことは書かないで」と伝えておくと、ぶれが減ります。

メッセージと変更したファイルが食い違っているコミット
メッセージと変更したファイルが食い違っているコミット

Git自体をAIに頼む

コマンドを覚えなくても、Gitの操作そのものをAIに頼めます。言葉で頼んで、結果と実行したコマンドを見せてもらう形にします。

頼み方AIが動かすコマンドの例変更の有無
昨日の夕方から何が変わったか見せてgit log --since見るだけ
このファイルだけ11月5日の版に戻してgit restore --sourceファイルが変わる
今の差分を見せて。まだコミットしないでgit diff見るだけ
今の変更を別の枝に分けてgit switch -c枝が増える
さっきのコミットを履歴を残したまま取り消してgit revertコミットが増える
.env が過去にコミットされていないか調べてgit log --all -- .env見るだけ

「昨日の夕方から何が変わったか見せて」を11月7日に頼むと、たとえば次のような結果になります。

$ git log --since="2026-11-06 17:00" --oneline --stat
4b1c7a5 夏の教室を追加
 menu.html | 1 +
 1 file changed, 1 insertion(+)
f482645 問い合わせの電話番号を修正
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

「このファイルだけ11月5日の版に戻して」の場合は、その日の最後のコミットを探してから戻します。

$ git log --until="2026-11-05 23:59" -1 --format='%h %s' -- menu.html
c39a71d 料金表を修正
$ git restore --source=c39a71d menu.html
$ git diff
diff --git a/menu.html b/menu.html
index a368e33..6709914 100644
--- a/menu.html
+++ b/menu.html
@@ -1,4 +1,3 @@
 <h1>料金表</h1>
 <p>体験教室 3,000円</p>
-<p>月4回 15,000円</p>
-<p>夏の教室 5,000円</p>
+<p>月4回 13,000円</p>

料金が戻っただけでなく、11月6日に足した「夏の教室」の行も消えています。戻すというのはこういうことで、差分を見ないと気づけません。この段階ならまだコミットしていないので、git restore menu.html で元に戻せます。

頼むときは「消す操作の前には必ず何が消えるか見せて」と添えておくと、確かめる場面を作れます。

できないことと、その代わり

Gitが戻せるのはリポジトリの中のファイルだけです。AIがコマンドを動かせる以上、外で起きたことは戻せません。

Gitで戻せないもの例代わり
コミットしていない変更作りかけの summer.pngこまめにコミットする
送信済みのメールAIが試しに send_mail.py を動かした試験用の宛先と鍵で動かす。本番の鍵を置かない
データベースや外部サービスの中身本番の予約データの更新試験環境で動かす。バックアップを取る
公開してしまった内容他人のクローンやフォーク鍵なら無効にして作り直す
サーバーで直接変えた内容本番サーバーでの書き換えリポジトリを経由して反映する運用にする

AIの判断そのものもGitでは確かめられません。料金が合っているか、電話番号が正しいかは、お客さんに出す内容を知っている人が見るしかありません。ホームページの1行を直す程度なら、AIを使わず画面で直すほうが早い場面もあります。

よく詰まるところ

症状原因直し方
main に直接コミットされていた枝を分ける前にAIが作業した送る前なら、先に git status でコミットしていない変更がないか見る(あればコミットか退避)。git branch fix-menu-price で今の状態に枝を付け、git reset --hard origin/main で main を戻す
差分が何百行も出る字下げや改行まで整えられたgit diff --ignore-all-space --stat で実質の変更を見る。「整形はしないで」と伝えてやり直す
.env がコミット候補に入った.gitignore がない、または git add -fgit restore --staged .env で外し、.gitignore に足す
.env を送ってしまった確かめずにpushした鍵を無効にして作り直す。手順は鍵の漏洩の記事にある
pushが rejected で断られた相手の変更がGitHubにある--force を使わず git pull してから送り直す
AIが「直しました」と言うのに直っていない別のファイルを直した、確かめていないgit diff を見て、ページを開いて確かめる
コミットメッセージが実際と違うAIの要約が雑だった送る前なら git commit --amend -m で書き直す
消えたファイルがあるAIが整理のつもりで消したgit status で確かめ、コミット済みなら git restore ファイル名
枝がどれか分からなくなった会話をまたいで作業したgit branch --show-current で確かめる。会話の最初に聞く習慣にする

実際に運用していると、AIが原因の事故の多くは、差分を見ないままコミットした1回から始まります。流れの中で省かないのは、3番目の「差分を見る」だけで構いません。

次に読む

差分を見たうえで戻したくなったら Gitで元に戻す:revert・reset・restoreの違いと使い分け に、合流の前の確かめ方は プルリクエストとは:作り方・レビュー・マージの流れ にあります。AIにプルリクエストまで作らせるなら GitHub CLIの使い方:ghでできることと、gitとの違い も役に立ちます。.env を送ってしまったら、まず APIキーやパスワードをGitHubにpushしてしまったときの対応 を開いてください。

Copilotの料金と入れ方は GitHub Copilotとは:料金・使い方・無料でできる範囲 にあります。

あわせて読む