git fetch でリモートの変更を取得する
このステップでは、リモートリポジトリから変更を取得する方法を学びます。他の人と一緒にプロジェクトを進めていて、彼らが何らかの更新を行ったと想像してみてください。あなたはそれらの更新を自分のローカルマシンに取得する必要があります。そのために使用するのが git fetch
コマンドです。このコマンドはリモートリポジトリから最新の変更をダウンロードしますが、現在のブランチにマージすることはありません。
まず、リモートリポジトリをシミュレートしましょう。空のリポジトリ (bare repository) を作成し、既存の my-time-machine
リポジトリにリモートとして追加します。
cd ~/project
mkdir remote-repo.git
cd remote-repo.git
git init --bare
これにより、空の Git リポジトリが作成されます。このようなリポジトリは、開発者がプッシュとプルを行う中央リポジトリとして一般的に使用されます。
次に、my-time-machine
リポジトリに戻り、この空のリポジトリをリモートとして追加しましょう。
cd ~/project/my-time-machine
git remote add origin ~/project/remote-repo.git
リモートの名前を origin
としました。これは一般的な命名規則です。次に、リモートが正しく追加されたことを確認しましょう。
git remote -v
以下のような出力が表示され、origin
リモートのフェッチとプッシュの URL が示されるはずです。
origin /home/labex/project/remote-repo.git (fetch)
origin /home/labex/project/remote-repo.git (push)
次に、リモートリポジトリでの変更をシミュレートしましょう。これは空のリポジトリなので、直接コミットを行うことはできません。代わりに、空のリポジトリのディレクトリに新しいファイルを作成することで変更をシミュレートします。
cd ~/project/remote-repo.git
echo "This is a remote change" > remote_file.txt
次に、my-time-machine
リポジトリに戻りましょう。
cd ~/project/my-time-machine
この時点で、ローカルリポジトリはシミュレートされたリモートに追加された remote_file.txt
のことを知りません。ここで git fetch
が役に立ちます。
git fetch
コマンドを実行しましょう。
git fetch origin
出力がほとんど表示されない場合もあれば、新しいオブジェクトが受信されたことを示すメッセージが表示される場合もあります。
git fetch origin
が行ったことは、origin
リモートに接続し、ローカルリポジトリに存在しない新しいコミットとオブジェクトをダウンロードすることです。ただし、これらの変更を現在のブランチ (master
) にマージすることはありません。変更は現在、ローカルリポジトリに利用可能ですが、リモートを追跡する特別なブランチ (通常は origin/master
と呼ばれます) に保存されています。
これが git fetch
と git pull
の重要な違いです。git pull
は基本的に git fetch
の後にマージを行うものです。まず git fetch
を使用することで、リモート上で利用可能な変更を確認してから、自分の作業に統合するかどうかを決めることができます。これにより、より多くのコントロールが可能になり、予期しない競合を防ぐのに役立ちます。
次のステップでは、ローカルブランチと取得したリモートブランチを比較して、ダウンロードされた変更を理解する方法を見ていきます。