git fetchで取得してきたコミット履歴をgit merge(マージ)やgit rebase(リベース)する方法を実例で解説|リモート追跡ブランチとは何か?(remotes/origin/mainなど)

github-prograshi(プロぐらし)-kv git/github
記事内に広告が含まれていることがあります。
[PR]

git fetchした内容をマージやリベースする方法

git fetchをした後に、取得してきた内容を作業中のローカルレポジトリのブランチにマージすることが頻繁に発生します。

その場合は更新されたリモート追跡ブランチをマージ、あるいはリベース対象として指定します

合わせて読みたい

git fetchって何?どんなことをしてるの?という疑問を持たれた方は下記をご参考ください。

【Git】git fetch(フェッチ)とは何か?使い方を実例で解説


リモート追跡ブランチとは何か?

リモート追跡ブランチとは何か?

Gitではローカルレポジトリのブランチとリモートレポジトリの同じ名前のブランチが直接連携しているわけではありません

このため、例えば、ローカルレポジトリのmainブランチで作業しているときに、git fetchを行うと、コミット履歴が更新されるのはローカルレポジトリのmainブランチではありません。

リモートレポジトリの各ブランチと直接連動しているブランチは他にあり、そのブランチのことを「リモート追跡ブランチ」と呼びます

リモート追跡ブランチは「remotes/リモートレポジトリ名/リモートブランチ名」という名前がついているブランチです。(例: remotes/origin/main)

リモート追跡ブランチは「git branch -a」で参照できます。-aはall(全てのブランチ)という意味です。


実例:リモート追跡ブランチの参照

$ git branch -a
* aa
  main
  vue-router
  remotes/origin/HEAD -> origin/main
  remotes/origin/aa
  remotes/origin/main

上記の例だと、リモートレポジトリには「main」と「aa」の2つのブランチがあり、それぞれのリモート追跡ブランチは「remotes/origin/main」「remotes/origin/aa」となっていることがわかります。

なお、「remotes/origin/HEAD -> origin/main」は取得してきた時点で最新のリモートレポジトリのデフォルトブランチを指しています。

「remotes/origin/HEAD」を使うことはほぼないので、あまり気にする必要はありません。

「remotes/origin/ブランチ名」はよく使うので覚えておく必要があります。


git mergeする方法

git fetchしたコミットをgit mergeする方法

git mergeで現在作業中のブランチに、コミットを取得してきたリモート追跡ブランチの内容を取り込みたい場合は以下のようにします。

git merge <リモートレポジトリ名>/<リモートのブランチ名>
point

リモート追跡ブランチを指定するときは、冒頭の「remote/」を省略することができます。

git merge origin/main

 ↑↓ 同じ

git merge remotes/origin/main


実例

例えば、以下のようなブランチの状態だとします。

$ git branch -a
  aa
  main
* test
  remotes/origin/HEAD -> origin/main
  remotes/origin/aa
  remotes/origin/main

このときに、現在のtestブランチにおいて、リモート追跡ブランチ「remotes/origin/aa」の内容をマージで取り込みたい場合は以下のようにします。

$ git merge origin/aa
Updating a90d4ef..0701d9d
Fast-forward
 docker-compose.yml | 2 ++
 1 file changed, 2 insertions(+)

すると、git fetchしてきた最新のリモートレポジトリ「origin」の「aa」ブランチの情報をマージすることができます。

合わせて読みたい

git mergeの処理内容や詳細、コンフリクトが発生した場合の対処法については下記をご参考ください。

【Git】git merge(マージ)とは何か?使い方を実例で解説

git rebaseする方法

git fetchしたコミットをgit rebaseする方法

git rebaseで現在作業中のブランチに、コミットを取得してきたリモート追跡ブランチの内容を取り込みたい場合は以下のようにします。

git rebase <リモートレポジトリ名>/<リモートのブランチ名>
point

リモート追跡ブランチを指定するときは、冒頭の「remote/」を省略することができます。

git rebase origin/main

 ↑↓ 同じ

git rebase remotes/origin/main


実例

例えば、以下のようなブランチの状態だとします。

$ git branch -a
  aa
  main
* test
  remotes/origin/HEAD -> origin/main
  remotes/origin/aa
  remotes/origin/main

このときに、現在のtestブランチにおいて、リモート追跡ブランチ「remotes/origin/aa」の内容をリベースで取り込みたい場合は以下のようにします。

$ git rebase origin/aa
Successfully rebased and updated refs/heads/test.

すると、git fetchしてきた最新のリモートレポジトリ「origin」の「aa」ブランチのコミット履歴を取り込むことができます。

合わせて読みたい

git rebaseの処理内容や詳細、コンフリクトが発生した場合の対処法については下記をご参考ください。

【Git】git rebase(リベース)とは何か?使い方を実例で解説

タイトルとURLをコピーしました