Gitを使っていると、こんな疑問を持ったことはないでしょうか?
- リモートリポジトリにはどんなブランチがあるのかを確認したい
- cloneする前にタグやブランチを確認したい
- fetchせずにリモートの状態だけを知りたい
- 特定のタグが存在するか確認したい
そんなときに使えるのがgit ls-remoteコマンドです。
この記事では、git ls-remoteが何をするコマンドなのか、どんな場面で使うのか、基本的な使い方からオプションまで、初心者にもわかるように解説します。
git ls-remote とは?
git ls-remote は、リモートリポジトリに存在する参照(ブランチやタグなど)を、対応するコミットのSHAとともに一覧表示するコマンドです。
git ls-remoteのポイントを以下に示します。
- ローカルにcloneしていなくても使える
- fetchやpullは行わないので、ローカルリポジトリは一切更新されない
- リモートにある参照(
refs)をSHAとともに一覧表示する
git ls-remoteの基本構文は以下のようになっています。
git ls-remote <リモート名 or URL>例えば、originの情報を確認する場合には、以下のコマンドを実行します。
git ls-remote originoriginはリモートリポジトリを指すためのデフォルト名(エイリアス)です。git cloneを実行すると、クローン元のリポジトリが自動的にoriginという名前で登録されます。
また、URLを直接指定することもできます。
git ls-remote https://github.com/example/sample-repo.gitgit ls-remoteの実行結果
git ls-remoteを実行すると、次のような形式で表示されます。
$ git ls-remote origin
515fd3a3b8d7a3cde2e542edaa5eefe952aed224 HEAD
515fd3a3b8d7a3cde2e542edaa5eefe952aed224 refs/heads/main
9a2fb147f2c61d0cab52c883e7e26f5b7948e3ed refs/heads/test
d8af7cadaa79d5837d73ec949e10b57dedb43e9b refs/heads/todo
95d81f8f8259cfda447c055f521e6b834432e4d4 refs/tags/v1.0.0
66176a11c243c4ff4cb0454563c0b3476393751c refs/tags/v1.1.0
d7d9e57443813ffbc2889920cb627ddae7fc66a3 refs/tags/v1.1.0^{}左側の文字列はコミットのハッシュ(SHA)を示し、右側の文字列は参照名(ブランチやタグ)を示しています。refs/heads/xxxはブランチを、refs/tags/xxxはタグを示しています。
HEADは、リモートリポジトリのデフォルトブランチ(多くの場合main)を指しています。
ブランチだけを確認したい場合
ブランチだけを見たい場合は--headsオプションを使います。
git ls-remote --heads origin出力例を以下に示します。
$ git ls-remote --heads origin
515fd3a3b8d7a3cde2e542edaa5eefe952aed224 refs/heads/main
9a2fb147f2c61d0cab52c883e7e26f5b7948e3ed refs/heads/test
d8af7cadaa79d5837d73ec949e10b57dedb43e9b refs/heads/todoリモートにどんなブランチが存在するかを一目で確認できます。
タグだけを確認したい場合
タグだけを確認したい場合は--tagsオプションを使います。
git ls-remote --tags origin出力例を以下に示します。
$ git ls-remote --tags origin
95d81f8f8259cfda447c055f521e6b834432e4d4 refs/tags/v1.0.0
66176a11c243c4ff4cb0454563c0b3476393751c refs/tags/v1.1.0
d7d9e57443813ffbc2889920cb627ddae7fc66a3 refs/tags/v1.1.0^{}特定のブランチやタグの参照を絞る場合
git ls-remoteでは、ブランチ名やタグ名を指定して、特定の参照だけを絞り込むこともできます。ブランチやタグが多いリポジトリでは、目的のものだけを確認したい場面がよくあります。
特定のブランチの参照を絞る場合
ブランチ名を指定すると、そのブランチに対応する参照だけを表示できます。
git ls-remote origin main出力例を以下に示します。
$ git ls-remote origin main
515fd3a3b8d7a3cde2e542edaa5eefe952aed224 refs/heads/main特定のタグの参照を絞る場合
タグ名を指定することで、特定のタグの存在を確認できます。
git ls-remote origin v1.1.0出力例を以下に示します。
$ git ls-remote origin v1.1.0
66176a11c243c4ff4cb0454563c0b3476393751c refs/tags/v1.1.0なお、git ls-remoteでは、ワイルドカード(*)を使った絞り込みも可能です。
git ls-remote origin "v1.*"出力例を以下に示します。
$ git ls-remote origin "v1.*"
95d81f8f8259cfda447c055f521e6b834432e4d4 refs/tags/v1.0.0
66176a11c243c4ff4cb0454563c0b3476393751c refs/tags/v1.1.0
d7d9e57443813ffbc2889920cb627ddae7fc66a3 refs/tags/v1.1.0^{}【補足】git ls-remoteの--refsオプション
git ls-remoteには--refsオプションがあります。このオプションは、refs/heads/*やrefs/tags/*のような「通常の参照」だけを表示するためのものです。
git ls-remoteをオプションなしで実行すると、リポジトリによっては次のような少し見慣れない参照が表示されることがあります。
HEAD- リモートリポジトリのデフォルトブランチ(多くの場合
main)を指しています。
- リモートリポジトリのデフォルトブランチ(多くの場合
refs/tags/v1.1.0^{}- タグそのものではなく、「そのタグが指している実際のコミット」を表す参照です。Gitが内部的に中身を示すために使います。
--refsオプションを指定すると、これらの参照を除外し、通常のブランチとタグだけを表示することができます。
本記事のまとめ
この記事では、git ls-remoteコマンドについて説明しました。
git ls-remoteは、リモートリポジトリのブランチやタグを、cloneやfetchをせずに確認できる便利なコマンドです。
- リモートにどんなブランチ・タグがあるかを事前に知りたいとき
- 特定のタグやブランチが存在するかだけを確認したいとき
- ローカル環境を一切変更せずにリモートの状態を把握したいとき
こうした場面で非常に役立ちます。
用途に応じて--headsや--tags、参照名の指定などを使い分けることで、必要な情報だけをスマートに取得できます。
お読みいただきありがとうございました。