VS Codeの「定期的にgit fetchを実行する」って何?初心者向けにGitの基礎

VS Codeの「定期的にgit fetchを実行する」って何?初心者向けにGitの基礎
  • URLをコピーしました!

Visual Studio Code(以下、VS Code)を使ってプログラミングの学習や開発を進め、いざGitやGitHubを連携させて使おうとした時。

画面の右下に突然、こんなポップアップメッセージが表示されてドキッとした経験はありませんか?

「定期的に git fetch を実行しますか?」
(選択肢:「はい」「いいえ」「後で聞く」)

Gitを触り始めたばかりの初心者にとって、「fetch(フェッチ)って何?」「勝手に何かされて、今書いているコードが壊れたり消えたりしないかな?」と不安になってしまうのは当然のことです。

よく分からないからと、とりあえず「×」ボタンで閉じたり、「いいえ」を選んでしまったりしている方も多いのではないでしょうか。

でも、安心してください。このメッセージは、決してあなたのコードを勝手に書き換えようとする恐ろしいものではありません。

むしろ、VS Codeがあなたのために気を利かせてくれている親切な提案なのです。

この記事では、同じような悩みを抱えるGit初心者の方に向けて、「定期的にgit fetchを実行する」とは一体どういう意味なのか、どう設定するのが正解なのかを分かりやすく解説します。

目次

「定期的にgit fetchを実行する」ポップアップの正体

VS Codeを開いていると不意に現れるあのメッセージ。

意味を理解するために、まずは「git fetch(ギット フェッチ)」というGitのコマンド(機能)について知る必要があります。

「git fetch」がやっていること

Gitを使って開発をしていると、コードの保管場所は大きく分けて2つ存在します。

一つは「あなたのパソコンの中(ローカルリポジトリ)」、もう一つは「インターネット上(リモートリポジトリ、代表的なものがGitHubなど)」です。

チーム開発をしている場合や、あなたが会社のPCと自宅のPCの両方で同じプロジェクトを触っている場合、インターネット上のリモートリポジトリには、他の誰か(あるいは別のPCにいる自分)が新しいコードを追加している可能性があります。

git fetch とは、リモートリポジトリを見に行って、「何か新しい変更(コミット)が追加されていないかな?」と確認し、その最新情報だけをあなたのパソコンの裏側(見えない保管庫)にこっそりダウンロードしてくる操作です。

手元のファイルが勝手に変わることはない(100%安全な操作)

ここで一番重要かつ安心なポイントをお伝えします。

git fetch を何度実行しても、あなたが今VS Codeの画面上で一生懸命編集している「手元のファイル(ワーキングツリー)」が勝手に書き換えられたり、上書きされて消えたりすることはありません。

あくまで「新しい更新情報があるよ」というデータを裏側で持ってくるだけです。非常に安全な操作なのです。

日常生活に例えると「郵便受けの確認」

専門用語ばかりだと分かりにくいので、日常生活に例えてみましょう。

git fetch は、言うなれば「家の外にある郵便ポストに、新しい手紙が届いていないか見に行くこと」です。

ポストの中に新しい手紙(他の人が書いた新しいコード)が届いているのを発見したら、とりあえずそれを取り出して、自分の部屋の「未読トレイ」に置いておきます。

この時、あなたが今机に向かって書いているノート(作業中のファイル)には何も変化はありませんよね?「あ、新しい手紙が来てるな」と気づくだけです。これが git fetch の状態です。

つまり、VS Codeからのポップアップメッセージは、

「あなたが作業している裏側で、VS Codeが数分おきに自動で郵便受け(GitHub)を見に行って、新しい手紙が届いているかチェックしておきましょうか?」

と提案してくれているのです。

どう設定するのが正解?「はい」「いいえ」の基準

「自動で郵便受けを確認してくれる」という機能の意味は分かりました。では、ポップアップが出た時、どう設定するのが一番良いのでしょうか?

結論:基本的には「はい(有効)」がおすすめ

結論から言うと、初心者から上級者まで、基本的には「はい(有効にする)」を選ぶことをおすすめします。

「はい」にする最大のメリット(トラブルの未然防止)

自動フェッチを「はい」にしておくと、どんな良いことがあるのでしょうか。

一番のメリットは、「誰かが新しいコードをアップロードしたことに、いち早く気づける」という点です。

VS Codeが裏側で自動的に git fetch を行ってくれると、もしGitHub上に新しい変更があった場合、VS Codeの画面左下のステータスバー(青い帯のところ)にあるGitのアイコンの横に「↓1」や「↓3」といったマークがひっそりと表示されます。

(※「↓1」は、「リモートリポジトリに、まだあなたのPCに取り込んでいない新しいコミットが1つありますよ」という意味です)

この小さなマークのおかげで、あなたは「自分が古いコードのまま作業を続けてしまう」という状態を防ぐことができます。

もし誰かが大きくコードを書き換えたのに気づかず、ずっと古い状態のコードを元に自分の作業を進めてしまうと、後からコードを合体させる時に「私の変更とあなたの変更がぶつかって、どっちを優先すればいいか分からない!」という大エラー(コンフリクト)が高確率で発生してしまいます。

自動フェッチは、このような後々の面倒なトラブルを未然に防ぐための強力なセンサーの役割を果たしてくれるのです。

「いいえ」が適しているケースとは?

基本は「はい」で問題ありませんが、例外として以下のような場合は「いいえ」を選んでも構いません。

  • 完全に自分一人だけで開発しており、他のPCも一切使わない場合
    →リモートリポジトリが誰かによって更新される可能性がゼロなので、確認しに行く必要がありません
  • 極端に通信制限のある環境にいる場合
    →モバイルルーターなどで、数KBの通信量すら節約したい特殊な状況下では、自動通信を切る意味があります
  • Gitの操作は全て自分の手動で行いたいという強いこだわりがある場合

もし迷ったら、とりあえず「はい」を選んでおいて損はありません。

「git fetch」と「git pull」の決定的な違い

Gitの学習を進めていると、必ずぶつかる疑問があります。「fetchって、要するにpullみたいなものじゃないの?」という疑問です。

実は、この2つは似ているようで全く違います。 ここを理解しておかないと、後で痛い目を見ることになります。

似ているようで全く違う2つのコマンド

一言で表すなら、以下のようになります。

  • git fetch は、ダウンロードするだけ。
  • git pull は、ダウンロードして、さらに「自動合体」させる。

「git fetch」はダウンロードするだけ(安全)

第1章で説明した通り、git fetch は最新情報を裏側の保管庫に持ってくるだけで、今開いている手元のファイルには一切影響を与えません。いつ何度実行してもエラーが起きることはなく安全です。

「git pull」はダウンロード+「自動合体」(要注意)

一方の git pull(ギット プル) は強力です。

リモートの最新情報をダウンロードしてくる(ここまではfetchと同じ)だけでなく、その最新内容を、あなたが今まさに編集している「手元のファイル(ワーキングツリー)」に自動的に合体(マージ:merge)させようとします。

もし誰かが書き換えた最新のコードを git pull した場合、あなたのVS Codeの画面上のファイルが、目の前でパッと新しい内容に書き換わったり、追加されたりします。

先ほどの「ノートと手紙」の例えで言うと、git pull は、「郵便ポストから新しい手紙を持ってきて、今自分が書いているノートに、いきなり他人の文章を強制的に書き写す(合体させる)状態」です。

非常に便利でよく使うコマンドですが、自分の作業ファイルが直接変化するため、タイミングによってはエラー(コンフリクト)が起きる可能性がある「注意が必要な操作」と言えます。

わかりやすい比較表

操作コマンドやっていること手元で編集中のファイル安全性
git fetchダウンロードのみ変わらない(そのまま)安全(いつでも実行OK)
git pullダウンロード + 自動合体変わる(上書き・追加される)注意が必要(エラーが起きるかも)

(※Gitの仕組み的に言うと、git pull は内部で git fetch を実行した直後に、続けて git merge を実行している、という複合コマンドになります。)

なぜVS Codeは「fetch」だけを自動でやりたがるのか?

ここまでの違いが分かれば、なぜVS Codeのポップアップが「定期的にgit pullを実行しますか?」ではなく「git fetch」だったのか、その理由がハッキリと分かるはずです。

もしVS Codeが裏側で勝手に git pull を定期実行する設定になっていたら、どうなるでしょうか?

あなたが一生懸命に数式やコードを考えて入力している最中に、数分おきに突然ファイルの中身が他人の書いたものに書き換わったり、後述するコンフリクト(競合)の真っ赤なエラー画面に切り替わったりしてしまうのです。そんなエディタ、怖くて使えませんよね。

だからこそ、手元のファイルに一切影響を与えない安全な git fetch に限定して、「裏側でこっそり更新チェックだけしておきましょうか?」と優しく聞いてくれていたわけです。

VS Codeの親切心が伝わってきますね。

なぜ「Pushする前にPullしろ」と言われるのか?(黄金ルール)

Gitについてネットで調べたり、入門書を読んだりしていると、必ずと言っていいほど目にする言葉があります。

「自分のコードをPush(プッシュ)する前には、まずPull(プル)をしなさい」

これは、Gitを使って複数人で開発(あるいは複数端末での開発)を行う上での「絶対的な黄金ルール」です。なぜこのような順番を守らなければならないのか?

複数人開発で起こる「上書き問題」

あなたと、同僚のAさんが同じプロジェクトを開発している状況を想像してみてください。

STEP

Aさんが先にPushしたAさんが自分の担当箇所の作業を終えて、コードをGitHub(リモート)にPushしました。これにより、GitHub上のデータは「Aさんの最新版」に更新されました。

STEP

あなたが何も知らずにPushしようとしたあなたは、AさんがPushしたことを知りません。

手元にある「Aさんの変更が反映されていない古い状態」をベースに自分の作業を終わらせ、そのままGitHubへPushしようとしました。

もしここで、あなたのPushがそのまま成功してしまったらどうなるでしょうか?

あなたが作業を始めた時点の古いデータで全体を上書きしてしまうことになるため、Aさんがせっかく数時間かけて書いた新しいコードが、丸ごと消え去ってしまうのです。

これはチーム開発において大惨事です。

GitHubは古いデータからのPushを全力で拒否する

このような悲劇を防ぐために、GitHub(やGitのシステム自体)は非常に賢く作られています。

GitHubは、自分が今持っている最新のデータよりも、古い歴史を持った人からのPushを「エラー(Pushの拒否)」として強制的に弾く仕組みになっています。

VS Codeの画面にエラーメッセージが出て、「あなたの手元の状態は古いです!先に新しく追加されたAさんの分を取り込んで(Pull)から、もう一度出直してきてください!」と教えてくれるわけです。

これをGitの用語で「Non-fast-forwardによるPushの拒否」と呼びますが、要するに「古いからダメ」ということです。

安全にコードを反映させる正しい手順(PullしてからPush)

そのため、自分の書いたコードを安全にGitHubへ反映させるには、エラーで弾かれないように以下の手順を踏む必要があります。

STEP

まず git pull を実行するGitHub上にある「Aさんの最新の変更」を自分のPCにダウンロードし、自分が今書いているコードと合体(マージ)させます。

STEP

手元で「最新の完全版」を作るこれにより、あなたのPCの中身は「Aさんのコード + あなたのコード」の両方が共存する、文字通りの最新状態になります。

STEP

最後に git push を実行する両方のコードが綺麗に合体した最新版を、改めてGitHubへアップロードします。

これで誰のコードも消えずに、安全にミッション完了です!

「自動fetch機能」がここで大活躍する理由

ここで、第1章と第2章で解説した「定期的にgit fetchを実行する」の設定(自動フェッチ)が強烈に活きてきます。

自動フェッチを「はい」にしておくと、AさんがPushした数分後には、VS Codeの画面左下にひっそりと「↓1」というマークが出現します。

あなたはこのマークを見た瞬間に、「あ、リモートに新しい変更があるな。ということは、自分が作業を終えてPushする前に、必ずPullをして最新版を取り込まないといけないな」と、エラーを起こす前に事前に気づくことができるのです。

エラーが出てから慌てて対処するのと、事前にわかっていて計画的にPullするのとでは、精神的な余裕が全く違いますよね。

コンフリクト(競合)が起きた時のVS Codeでの直し方

さて、「Pushの前にはPullをする」というルールに従って git pull を実行した時、Gitを触る誰もが恐れる「ある事件」が起きることがあります。

それが「コンフリクト(競合)」です。

コンフリクトとは何か?(Gitがパニックになった状態)

コンフリクトとは、コードを合体(PullやMerge)させようとした時に、「あなたとAさんが、全く同じファイルの、全く同じ行を違う内容に編集してしまっていた場合」に起こります。

Gitは非常に優秀なプログラムですが、同じ行が違う言葉に書き換えられていると、「これはAさんのコードを残すべき?それともあなたのコードを残すべき?それとも両方!?」とパニックになってしまい、自動での合体を諦めて作業をストップしてしまいます。

「ここから先は人間であるあなたが決めてください!」とバトンを渡された状態、それがコンフリクトです。

ターミナル(黒い画面)でGitを使っていると、このコンフリクトの解決は少し面倒で怖い作業なのですが、VS Codeを使っていれば全く恐れる必要はありません。

パズルのように視覚的、かつ直感的に直すことができます。

解決のための4ステップ(具体的なボタンの使い方)

コンフリクトが発生すると、VS Codeの左側のファイルツリー(エクスプローラー)で、対象のファイルが赤色(または !C マーク)になり、エラーを知らせてくれます。直し方は以下の4ステップです。

Step 1: 赤くなっているファイルを開く

エラーになっているファイルをクリックして開きます。すると、コードの中に <<<<<<< HEAD=======>>>>>>> といった見慣れない記号が勝手に入り込んでいる場所があります。ここが「ぶつかってパニックになっている場所」です。

Step 2: VS Codeの便利なボタン(魔法のメニュー)を使う

ここがVS Codeの最も素晴らしい機能の一つです。あの見慣れない記号のすぐ上に、「どれを残しますか?」というクリックできるメニュー(色付きの文字)が表示されているはずです。状況に合わせて、以下のいずれかをクリックするだけでOKです。

  • 現在の変更を取り込む (Accept Current Change)
    あなたが手元で書いていたコードを優先して残し、Aさん(相手)のコードを消します。(「私のコードが絶対に正しい!」という時に使います)
  • 入力側の変更を取り込む (Accept Incoming Change)
    Pullして降ってきた「Aさん(相手)の最新コード」を優先して残し、自分のコードを消します。(「あ、Aさんの書き方の方が正解だわ」という時に使います)
  • 両方の変更を取り込む (Accept Both Changes)
    自分と相手、両方のコードを縦に並べて残します。ただし、そのままではプログラムの構文エラーになることが多いので、ボタンをクリックした後に、手作業で不要な部分を消したりしてコードを整える必要があります。
  • 変更を比較 (Compare Changes)
    左右に画面を分割して、「どこがどう違うのか」をじっくり見比べることができます。いきなり選ぶのが怖い時は、まずこれを見てみましょう。

Step 3: ファイルを保存する

ボタンをポチッと押すと、邪魔だった記号(<<<<<<< など)が一瞬で綺麗に消え去り、あなたが選んだコードだけが残ります。もし手作業で微調整が必要ならこのタイミングで行い、最後にファイルを保存(Ctrl + S / Macは Cmd + S)します。

これでファイルの中身の修復は完了です。

Step 4: 解決したことをGitに伝える(コミット)

ファイルの保存が終わったら、「人間がちゃんと直しましたよ」とGitに教えてあげる必要があります。

VS Codeの左側の「ソース管理(枝分かれしたアイコン)」メニューを開きます。

  1. 解決したファイルの横にある + ボタン(変更をステージ)を押します。
  2. メッセージ入力欄に「コンフリクトを解決」などと分かりやすいメモを入力し、「コミット」ボタンを押します。

おめでとうございます!これでコンフリクトの解決は完全に終了です。

Gitのパニックは収まり、無事に最新状態のコードが完成しました。この後、心置きなく git push をして自分の作業をリモートに反映させましょう。

「VS Codeのボタンを選んで押すだけ」と思えば、コンフリクトもそれほど怖いものではありませんよね。

後から設定を変更したくなった時の手順

最後に、最初の話題に戻りましょう。

「定期的にgit fetchを実行する」のポップアップで「はい」を選んだけれど、パソコンの動作が少し重く感じたり、やっぱり不要だなと感じてオフにしたくなった場合の手順です。

この設定は、VS Codeの設定画面からいつでも簡単にオン・オフを切り替えることができます。

  1. VS Codeの設定画面を開きます。
    • Windowsの場合: Ctrl + , (コントロールキーを押しながらカンマ)
    • Macの場合: Cmd + , (コマンドキーを押しながらカンマ)
  2. 画面上部の検索窓(設定の検索)に、半角英数で git.autofetch と入力します。
  3. 検索結果に Git: Autofetch という項目が表示されます。
    • チェックを入れる(または all などを選択)と「有効(はい)」になります。
    • チェックを外す(または false など)と「無効(いいえ)」になります。

まずは「はい」で運用してみて、どうしても気になったらこの手順でオフにする、という気軽なスタンスで全く問題ありません。

まとめ

「定期的にgit fetchを実行しますか?」という一つのポップアップから、Gitの重要な基礎知識について深く掘り下げてきました。

この記事の重要なポイントをおさらいしておきましょう。

  1. git fetch は安全な情報確認! 手元のファイルが書き換わることはないので、自動実行(はい)にしておくのがおすすめ。
  2. fetchpull は別物! 情報を取ってくるだけの fetch に対し、pull は「情報取得+自動合体」を行う強力なコマンド。
  3. Pushの前には必ずPull! 他人のコードを上書きして消してしまわないための黄金ルール。
  4. コンフリクトは怖くない! VS Codeの便利なボタンを使えば、パズル感覚で視覚的にサクッと解決できる。

Gitは最初、見慣れない専門用語が多くてとっつきにくい印象があるかもしれません。

しかし、今回のように「裏側で何が起きているのか」を少しイメージできるようになると、途端に強力で頼もしい味方になってくれます。

VS Codeは、初心者がGitを安全に、そして視覚的に分かりやすく使うための機能が豊富に備わった素晴らしいエディタです。

ぜひ、恐れることなく色々な操作を試して、プログラミングや開発の幅を広げていってくださいね!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

サイト「インターネットビジネスの世界」運営者。ビジネスプロデューサー、著述業。メルマガやブログを書きながら、好きなことをしてのんびりと生きています。

目次