VS Codeで編集しているなら、Gitの操作も同じ画面で済ませられます。ただ、VS CodeとGit、GitHubの関係が曖昧なままだと、どこで何が止まっているのか分からなくなります。この記事では、サンプル料理教室の代表が website を手元に持ってきて、料金表を直し、GitHubへ送るまでを順に書きます。読み終わると、連携の手順が済み、「Source Control」の画面の表示を読めるようになります。
画面の文言はVS Codeの公式ドキュメントに載っているものだけを書き、同じことをするGitのコマンドは実際に動かした表示を載せています。
この記事の内容
先に答えると
VS Codeは編集用のアプリで、Gitの操作は別に入っているGitを呼び出して動きます。GitHubへのサインインとGitの基本の操作はVS Codeに最初から入っていて、拡張機能は要りません。プルリクエストまでVS Codeの中で扱うなら、拡張機能のGitHub Pull Requestsを足します。
- まず
git --versionでGitを確かめます。無ければ先に入れます - GitHubとの連携は「Clone Repository」から「Clone from GitHub」を選び、サインインすれば始まります
- 普段の流れは、差分を見る、「+」でステージ、メッセージを書いて「Commit」、「Sync Changes」の順です
- コミットの名前とメールはGitの設定で、GitHubのサインインでは決まりません
- github.dev(GitHubで
.を押すと開くブラウザ版)は別物で、端末もコードの実行もありません
VS CodeとGitとGitHubの関係
| 名前 | 何か | どう繋がるか |
|---|---|---|
| Git | 変更の履歴を残す仕組み | 別に入れる。VS Codeはこれを使う |
| VS Code | 編集用のアプリ。Gitを操作する画面が入っている | Gitを呼び出す |
| GitHub | 履歴を預けて共有するサービス | VS Codeでサインインすると、一覧からクローンできる |
| GitHub Pull Requests | VS Codeの拡張機能 | プルリクエストとIssueを扱う |
GitHub Desktopを入れていても、VS Codeが必要とするGitの代わりにはなりません。公式にそう書かれています。
リポジトリは、ファイルと変更履歴を入れておく場所です。コミットは、変更を1回分の記録として手元に残す操作で、GitHubにはまだ届きません。プッシュは、そのコミットをGitHubへ送る操作です。

連携の手順
Gitを確かめる
- Macは「ターミナル」、WindowsはPowerShellを開きます。
git --versionと打ちます。
$ git --version
git version 2.50.1 (Apple Git-155)
バージョンが出れば入っています。出なければ「Gitのインストールと初期設定:MacとWindows、名前とメールと認証」を先に済ませて、VS Codeを開き直します。
名前とメールを入れる
コミットに記録される名前とメールは、Gitの設定です。GitHubにサインインしても自動では入りません。同じ記事のとおり --global で入れるか、そのリポジトリだけなら次のように入れます。website をクローンしたあとに打ちます。
$ git config --local user.name "代表"
$ git config --local user.email daihyo@sample-cooking.example
$ git config --show-origin user.email
file:.git/config daihyo@sample-cooking.example
GitHubにサインインしてクローンする
クローンは、リポジトリを手元に持ってくる操作です。
- 左の「Source Control」を開きます。Macは
⌃⇧G、WindowsはCtrl+Shift+Gでも開きます。 - 「Clone Repository」を押します。
- 「Clone from GitHub」を選びます。
- サインインを求められたら、ブラウザの案内に従って許可します。
- 一覧から
sample-cooking/websiteを選びます。 - 置くフォルダを選びます。
- クローンが終わったら、開くほうを選びます。
手順2の代わりに、コマンドパレット(⇧⌘P、Windowsは Ctrl+Shift+P で開く、命令を探して実行する欄)で「Git: Clone」を実行しても同じです。
プルリクエストを扱うなら、拡張機能を足す
- 左の「Extensions」を開きます。Macは
⇧⌘X、WindowsはCtrl+Shift+Xでも開きます。 - 検索の欄に
GitHub Pull Requestsと書きます。 - 「Install」を押します。
- 左に増えたGitHubのアイコンを押します。
- 「Sign In」を押します。
- ブラウザの案内に従って許可します。
拡張機能の名前は、配布ページで「GitHub Pull Requests」、VS Codeの公式の説明で「GitHub Pull Requests and Issues」と書かれています。発行元がGitHubのものを選びます。
Source Controlの画面の読み方
| 表示 | 場所 | 意味 |
|---|---|---|
| 「Changes」 | 「Source Control」の一覧 | まだステージしていない変更 |
| 「Staged Changes」 | 「Source Control」の一覧 | 次のコミットに入れると選んだ変更 |
| メッセージの欄 | 「Source Control」 | コミットの説明を書く |
| 「Commit」 | 「Source Control」 | 手元に記録する。サーバーには送らない |
| 「Sync Changes」 | 「Source Control」 | GitHubの変更を先に取り込んでから、自分のコミットを送る |
| 「Publish Branch」 | 下のステータスバー(枝がまだGitHubに無いとき) | 手元の新しい枝を、GitHubに初めて送る |
| 左下の枝の名前 | 下のステータスバー | 今いる枝。押すと切り替え、新しい枝の作成 |
↑、↓ の数 | 下のステータスバー | ↑ は送っていないコミット、↓ は受け取っていないコミット |
「More Actions」(...) | 「Source Control」 | Fetch、Push、「Commit」の中の「Undo Last Commit」など |
ファイルの横の文字は、変更の種類です。
| 文字 | 意味 | git status --short では |
|---|---|---|
M | 変更した(modified) | M |
U | Gitがまだ管理していない新しいファイル(untracked) | ?? |
D | 削除した(deleted) | D |
A | 新しいファイルをステージした | A |
M、U、D はVS Codeの公式に載っています。A は公式のこの一覧に名前がなく、右の列のとおりGit側の表示です。実際の表示は次のとおりです。新しいファイル style.css を入れると、ステージの前後で印が変わります。
$ git status --short
M menu.html
?? style.css
$ git add menu.html style.css
$ git status --short
M menu.html
A style.css
git status --short の左の列がステージした側、右の列がまだの側です。

料金表を直して送る
menu.html の基本コースを5,000円から5,500円に直す例です。
- 左のファイルの一覧から
menu.htmlを開きます。 - 金額を直して保存します。
- 「Source Control」を開きます。「Changes」に
menu.htmlがMで出ています。 menu.htmlを押します。差分の画面が開きます。- 金額の行だけが変わっているか見ます。
- ファイルにカーソルを合わせて「+」(「Stage Changes」)を押します。「Staged Changes」に移ります。
- メッセージの欄に「料金表を修正」と書きます。
- 「Commit」を押します。ここではまだ手元に記録しただけです。
- 「Sync Changes」を押します。ここでGitHubに届きます。
差分の画面は、左が元、右が変更後です。「More Actions」(...)の「Diff View」で、「Inline」「Side by Side」「Automatic」の3つから選べます。既定はAutomaticで、幅が900ピクセルを境に切り替わります。編集の画面の左端にも印が出て、緑が追加、青が変更、赤い三角が削除です。
「Sync Changes」の中身はコマンドの2つ分です。外注エンジニアBが先に 住所を追加 を送っていた場面を動かしました。status -sb はこの中身を1行で見せるもので、[ahead 1, behind 1] がステータスバーの ↑1 ↓1 にあたります。
$ git fetch origin
From …/remote/website
0e2a458..c5d90a1 main -> origin/main
$ git status -sb
## main...origin/main [ahead 1, behind 1]
$ git pull --no-rebase --no-edit origin main
From …/remote/website
* branch main -> FETCH_HEAD
Merge made by the 'ort' strategy.
index.html | 1 +
1 file changed, 1 insertion(+)
$ git push origin main
To …/remote/website.git
c5d90a1..bb9f0bb main -> main
From と To の場所は練習用のフォルダなので縮めてあります。本物なら GitHub のURLです。
ボタンとコマンドの対応
外注エンジニアBの説明やAIの作業報告はコマンドで来ます。
| VS Codeの操作 | Gitのコマンド |
|---|---|
| 「Clone Repository」または「Git: Clone」 | git clone |
| 「+」(「Stage Changes」) | git add |
| 「Commit」 | git commit |
| 「Sync Changes」 | git pull のあと git push |
| 「More Actions」の「Fetch」 | git fetch |
| 「More Actions」の「Push」 | git push |
| 「Publish Branch」 | git push -u origin 枝の名前 |
| 枝の名前を押して「Create new branch…」 | git switch -c 枝の名前 |
| 「Git: Checkout to」 | git switch 枝の名前 |
| 「Discard Changes」 | git restore |
| 「Git: Stash」 | git stash |
| 「More Actions」の「Commit」の中の「Undo Last Commit」 | git reset --soft HEAD~1 に近い |
| 「Git: Abort Merge」 | git merge --abort |
3つのコマンドの違いは「git add・commit・pushの違い:保存して送るまでの流れ」に書きました。
枝を作って送る
ブランチ(枝)は、本番の中身とは別に作業するための線です。add-summer-class を作る例です。
- 左下の枝の名前を押します。
- 「Create new branch…」を選びます。
add-summer-classと書きます。この枝に移ります。- 変更をステージして、コミットします。
- 下のステータスバーの「Publish Branch」を押します。
$ git switch -c add-summer-class
Switched to a new branch 'add-summer-class'
$ git push -u origin add-summer-class
To …/remote/website.git
* [new branch] add-summer-class -> add-summer-class
branch 'add-summer-class' set up to track 'origin/add-summer-class'.
コミットしていない変更があると、切り替えをGitが止めることがあります。先にコミットするか、「Git: Stash」でしまいます。
衝突が出たとき
衝突(コンフリクト)は、同じファイルの同じ場所を2人が変えて、どちらを残すかをGitが決められない状態です。衝突したファイルは「Source Control」の「Merge Changes」に出ます。
- 「Merge Changes」のファイルを右クリックして「Open in Merge Editor」を選びます(エディタで開いたあとなら「Resolve in Merge Editor」のボタンでも開けます)。3画面の編集が開きます。
- 左の「Incoming」(入ってくる側)と右の「Current」(今の枝の側)を見比べます。通常の合流の場合の読み方で、リベース中は左右の意味が逆になります。
- 残すほうを選び、下の「Result」で最終の形にします。
- 「Complete Merge」を押します。そのファイルがステージされます。
- ほかの衝突したファイルも同じように直します。
- 「Source Control」でメッセージを確かめて「Commit」を押します。
「Complete Merge」だけでは合流は終わりません。手順6までやって完了です。やめるときはコマンドパレットで「Git: Abort Merge」を実行します。直している途中の内容は消えるので、残したいものは先に写します。記号の読み方や、どちらを残すかの判断は「コンフリクトの直し方:起きる理由と、解消の手順」に書きました。

GitHub Pull Requestsでプルリクエストを見る
プルリクエスト(Pull Request、PR)は、枝の変更を本筋に入れていいかを確認する依頼です。拡張機能を入れると、VS Codeの中で作成とレビューができます。
作る
- 枝にコミットを済ませます。
- コマンドパレットで「GitHub Pull Requests: Create Pull Request」を実行します。
- 「Create」の画面で、合流先の枝を選びます。
- 「Create」を押します。枝をまだ送っていなければ、送り先を聞かれるので選びます。
見る
- 左のGitHubのアイコンを押します。
- 「Pull Requests」の一覧から、Bのプルリクエストを選びます。
- ファイルを選んで差分を読みます。
- コメントを入れます。
- プルリクエストの「Description」の画面からレビューを送ります。
手元で動かして確かめたいときは、今の変更をコミットするかしまってから「Checkout」を押します。
github.devとの違い
GitHubのリポジトリの画面で . を押すと、github.devが開きます。VS Codeのブラウザ版です。
| 項目 | VS Code(手元) | github.dev |
|---|---|---|
| 入れる作業 | 要る。Gitも別に要る | 要らない。無料 |
| コードの実行、端末 | できる | できない |
| 拡張機能 | 入れられる | 一部だけ |
| 向いている場面 | 普段の作業 | 文言を1か所直す、差分を読む |
github.devで既存のプルリクエストを直すと、変更はその枝に直接コミットされます。
GitHub Copilotの話は「GitHub Copilotとは:料金・使い方・無料でできる範囲」に書きました。
できないことと、その代わり
| できないこと | その代わり |
|---|---|
| Gitを入れずに使う | Gitを入れる。GitHub Desktopを入れても代わりにならない |
| GitHubのサインインでコミットの名前を決める | git config で入れる |
| 枝の保護や権限をVS Codeで変える | GitHubのブラウザの画面で行う |
| 入れてはいけないファイルを止める | 差分を人が見る。.gitignore で最初から除く |
| 公開中のホームページに反映する | GitHubへ送っただけでは変わらない場合がある。反映の仕組みを外注エンジニアBに聞く |
よく詰まるところ
| 症状 | 原因 | 直し方 |
|---|---|---|
| 「Git not found」と出る | VS CodeがGitを見つけられない | git --version で確かめ、無ければ入れて、VS Codeを開き直す |
| ターミナルではGitが動くのにVS Codeで動かない | Gitの場所が別 | 設定の git.path にGitの場所をフルパスで書き、開き直す |
| 「Make sure you configure your “user.name” and “user.email” in git」と出る | 名前とメールが未設定。サインインでは入らない | git config で入れて、もう一度コミットする |
| コミットの名前が意図と違う | 自動で決まった名前か、古い設定が使われている | git config --show-origin user.email で設定元を見て直す。過去のコミットは変わらない |
| 「Authentication failed」と出る | 保存された認証情報が古い、または間違っている | 認証情報を直して、もう一度試す |
non-fast-forward や fetch first で断られる | Bが先に送っている | 取り込んでから送る。force pushはしない |
| 何もステージせずに「Commit」を押すと確認が出る | Gitの設定によって動きが変わる | 「+」でステージしてから押す |
.gitignore に書いたのに一覧に残る | すでに管理されている、またはステージ済み | git rm --cached で管理から外す |
| 原因が分からない | 実行しているGitの中身が見えていない | コマンドパレットで「Git: Show Git Output」を実行する |
次に読む
- GitHub Desktop・Sourcetree・VS Codeの使い方と選び方
- Gitのインストールと初期設定:MacとWindows、名前とメールと認証
- git add・commit・pushの違い:保存して送るまでの流れ
- GitHub Copilotとは:料金・使い方・無料でできる範囲