はじめに
この実験では、リモートリポジトリ上の Git ブランチが削除されているかどうかを確認する方法を学びます。リモートのローカルリポジトリのビューを更新し、利用可能なリモートブランチをリストアップし、さまざまな Git コマンドを使用してそれらの存在を確認するための必須の手順を説明します。
まず、git fetch --prune を使用してローカルリポジトリをリモートと同期し、古いリモート追跡ブランチを削除します。次に、git branch -r を使用して、現在ローカルリポジトリに反映されているリモート追跡ブランチをリストアップします。最後に、git ls-remote を使用して特定のブランチについてリモートリポジトリに直接問い合わせる方法を学び、これは確認のための代替方法となります。
git fetch --prune を実行して更新する
このステップでは、リモートリポジトリの最新の変更をローカルの Git リポジトリに反映する方法を学びます。他の人と一緒にプロジェクトを進めていて、彼らが変更を加えて中央サーバーにプッシュしたとしましょう。あなたはそれらの変更を自分のローカルコピーに取り込む方法が必要です。
このために使用するコマンドは git fetch です。このコマンドは、リモートリポジトリからコミット、ファイル、参照 (refs) をダウンロードしてローカルリポジトリに取り込みます。これは、サーバーから最新の更新を取得するが、実際には現在の作業にマージしないようなものです。
また、--prune オプションも使用します。このオプションは、リモート上に存在しなくなったリモート追跡ブランチを削除します。これにより、リモートブランチのリストをきれいに保ち、最新の状態にすることができます。
リモートリポジトリが設定されていると仮定しましょう(リモートを追加する方法は、将来の実験で説明します)。今は、リモートからのフェッチをシミュレートします。
ターミナルを開き、~/project/my-time-machine ディレクトリにいることを確認して、次のコマンドを実行します。
cd ~/project/my-time-machine
git fetch --prune origin
次のような出力が表示されることがあります(正確な出力はリモートリポジトリによって異なります)。
From origin
* [new branch] feature/new-feature -> origin/feature/new-feature
- [deleted] (none) -> origin/old-branch
この出力は、Git が新しいブランチ (feature/new-feature) をフェッチし、リモート上に存在しなくなったブランチ (old-branch) を削除したことを示しています。
git fetch --prune を実行することは、リモートリポジトリのローカルビューを正確に保つための良い習慣です。これにより、他の人が行った変更を自分の作業に統合する前に確認することができます。
git branch -r でリモートブランチを確認する
前のステップでは、git fetch --prune を使用してリモートからの情報でローカルリポジトリを更新しました。では、フェッチ後にローカルリポジトリで利用可能なリモートブランチを確認しましょう。
git branch コマンドに -r オプションを付けることで、リモート追跡ブランチをリストアップすることができます。このコマンドは、Git がリモートリポジトリからフェッチしたブランチを表示します。
まだ ~/project/my-time-machine ディレクトリにいることを確認して、次のコマンドを実行します。
cd ~/project/my-time-machine
git branch -r
リモートブランチのリストが表示されるはずです。通常、リモート名(例えば origin)が接頭辞として付き、その後にブランチ名が続きます。例えば:
origin/master
origin/feature/new-feature
この出力は、リモートリポジトリ(この場合は origin)に存在するブランチに関する情報を示しており、ローカルの Git がそれに関する情報を持っていることを意味します。これらは直接作業できるローカルブランチではなく、リモート上のブランチの状態を参照するものです。
リモート追跡ブランチを理解することは重要です。なぜなら、これらは最後の git fetch または git pull 時点でのリモートリポジトリの状態を表しているからです。これらを使うことで、ローカルの作業ブランチに影響を与えることなく、リモートで何が起こっているかを確認することができます。
git ls-remote で確認する
前のステップでは、git branch -r を使用してローカルリポジトリ内のリモート追跡ブランチを確認しました。リモートリポジトリ上の参照 (refs) を確認するためのもう 1 つの便利なコマンドが git ls-remote です。
オブジェクトをダウンロードする git fetch とは異なり、git ls-remote はリモートリポジトリ内の参照(ブランチやタグなど)を単にリストアップするだけで、それらをフェッチしません。これは、ローカルコピーを更新することなく、リモート上で利用可能なものをすばやく確認するのに便利です。
~/project/my-time-machine ディレクトリにいることを確認して、リモート名(通常は origin)を指定して次のコマンドを実行します。
cd ~/project/my-time-machine
git ls-remote origin
次のような出力が表示されるはずです。
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 HEAD
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 refs/heads/master
f0e1d2c3b4a59687765443210fedcba987654321 refs/heads/feature/new-feature
この出力は、コミットハッシュの後に参照名が続きます。HEAD は通常、リモート上のデフォルトブランチ(多くの場合 master または main)を指します。refs/heads/ はブランチを示し、refs/tags/ はタグを示します。
git branch -r と git ls-remote の出力を比較することで、リモート上に実際に存在するもの (git ls-remote) と、最後のフェッチ後にローカルリポジトリがリモートに関して知っているもの (git branch -r) の違いを理解するのに役立ちます。
このコマンドは、完全なフェッチ操作を行うことなく、リモートリポジトリの構造をすばやく確認する方法です。
まとめ
この実験では、Git のブランチがリモートリポジトリで削除されたかどうかを確認する方法を学びました。最初の重要なステップは、git fetch --prune を使用してローカルリポジトリのリモートの状態を更新することです。このコマンドはリモートから最新の情報をダウンロードし、重要なことに、リモート上に存在しなくなったローカルのリモート追跡ブランチを削除し、ローカルの状態が正確であることを保証します。
フェッチとプルーニングの後、git branch -r などのコマンドを使用して、まだローカルリポジトリに存在するリモート追跡ブランチをリストアップすることができます。フェッチ前後の出力を比較するか、フェッチ中に削除されたブランチを単に確認することで、特定のブランチがリモートで削除されたかどうかを判断することができます。



