リモートの最新の状態を取得しよう
ダウンロードする前に、リモートの状態を確認する
ブラウザの「更新ボタン」と同じ「フェッチ」
Git Graphの以下のボタンを押してください。 表示が更新され、リモートの状態が反映されます。
この「表示の更新」をGitでは「フェッチ」と言います。
フェッチボタンは比較的色々なところに置かれていますが、どれを押しても同じです。
実はVSCodeでは、「ソース管理」タブを選択したときなど、各所で自動でフェッチがされています。
フェッチをして初めて、リモートリポジトリの変化に気づけるので、ウィンドウが開きっぱなしであったり、ネットワークが不安定であったり、何か気になることがあれば、気軽にボタンでフェッチを実行しましょう。
なぜフェッチのステップが要るのか?
前置きでも少し触れましたが。Gitの「コードが破壊されない安全機能」の一つに、「分散型データ管理」を採用しているという点があります。
レッスンの進行上、GitHubがクラウド上のバックアップのように、もしくはリモートかローカルかどちらかが優先されるべき「正のリポジトリ」というような印象になっているかと思いますが、それは運用者が決めることであり、Gitのシステム的には、どれかのリポジトリが正になるというような制約はありません。
つまり、ローカルリポジトリ、リモートリポジトリに関わらず、すべての同じ派生のリポジトリは、それぞれがバックアップとしての役割を担っている状態です。
どのリポジトリ(が持っているブランチ)が最新であるかは、比較して判断する必要があります。そのためのフェッチです。
と、思ったら、関係者全員に聞こえる場所(グループチャット等)で、「たすけて!!」と叫びましょう。
他の誰かのローカルリポジトリから、リモートリポジトリを復元すればスピード解決するかもしれません。
意図しないプッシュをしてしまってリモートの状態をおかしくしてしまう。ということは、導入初期には起こしがちです。
チームリーダーは特に、フェッチをせずにプルをしてしまうことは避けましょう。
プッシュとプルが両方必要と検出されるパターン
ブランチは、派生元が後で変更されることがあります。
そういう時系列で解決できない変更があった場合、プッシュとプルが両方必要と検出されます。
それは、コミットの時系列で衝突が起こっていると言えます。
(もちろん普通に衝突もあり得る)
こうなった場合の解決方法は、リベースしてフォースプッシュになりますが、これは後ほど解説します。