ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【Git】ブランチではなくタグを指定してgit mergeする

この記事を共有する

目次

はじめに

公開されているサンプルリポジトリをベースに自分の環境を構築するケースがあるかと思います。
その後、本家リポジトリがバージョンアップしたときに、最新版を取り込んで自分の環境へ反映する、という作業が発生します。
普段はmainブランチから最新版を取得していましたが、tag(バージョン)を指定してmergeする方法を初めてやってみたので、学んだことを残しておこうと思います。

git コマンド

前提

本家のサンプルリポジトリを 「upstream」 という名前で登録しておきます。 また、「upstream」の最新情報をローカルへ取得しておきます。

git remote add upstream <本家リポジトリのURL>
git fetch upstream --tags

マージ

単純ですが、ブランチを指定する場合とtagを指定する場合のmergeコマンドの差は以下の通りです。

# ブランチ(例:main)を指定する場合
git merge upstream/main
# tag(例:v1.2.0)を指定する場合
git merge v1.2.0

補足)取得済みの tag 一覧は 「git tag」 で確認できます。

ブランチ指定とtag指定の違い

以下、それぞれの違いを簡単にまとめてみました。

ブランチを指定 tagを指定
指定する名前 upstream/main(リモート名で修飾する) v1.2.0(tag名そのもの)
取り込む内容 そのブランチの常に最新のコミット 固定された特定バージョンの時点
バージョンの安定性 変動する(更新のたびに中身が変わる) 固定される(いつ取り込んでも同じ状態)
向いているケース 常に最新を追従したいとき バージョンを明示して安定した状態を取り込みたいとき

ポイントは、tag はリモート名で修飾しないという点です。ブランチは 「upstream/main」 のように 「リモート名/ブランチ名」 で指定しますが、tag は 「v1.2.0」 のように tag 名を直接指定します。
ここで、「tag指定の場合はリモート名つけなくてよい理由って何?」となり軽く調べてみました。(この内容が今回学んだ内容です。)

保存場所(参照名)の違い

リモートブランチの保存場所( refs/remotes/)

upstream から取得したブランチは、「refs/remotes/upstream/main」 のように remotes配下に 「upstream/ブランチ名」 という形で保存されます。そのため、ブランチを指定するときは 「upstream/main」 と書きます。

タグの保存場所( refs/tags/ )

一方、upstream から取得したタグは、取得元がどこであってもローカルリポジトリの 「refs/tags/v1.2.0」 に直接配置されます。「refs/tags/upstream/v1.2.0」 のようにリモート名が挟まる構造にはなりません。これが、tag を指定するときにリモート名で修飾しない理由だそうです。

おわりに

まだまだGit触り慣れておらず、毎回新しい学びがありますが、いつか使いこなせるように頑張りたい所存です。。。

この記事は私が書きました

中野 友加里

記事一覧

身体動かすの好きです。頑張って同じくらい頭も動かします。

中野 友加里

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。