Git ローカルリポジトリの更新(全ブランチの更新)について

Git
この記事は約3分で読めます。
記事内に広告が含まれています。

Gitを使って開発を進める中で、リモートリポジトリの最新の変更をローカルに取り込む必要があります。

本記事のポイント
  • リモートリポジトリの更新を取り込む。
    → git fetch, pullの違いを理解する(オプション–allにも触れます)。
  • ローカルブランチにマージする。
    → 全ブランチに自動マージするコマンドはないため必要ならスクリプトを準備します。

git fetch・pullの違い

リモートリポジトリ内容の取り込みは、git pullだけ覚えておけば大抵なんとかなります。

が、ここでは違いを表でまとめておきます。

コマンド説明
git fetchリモートリポジトリの更新を取得し、ローカルのリモート追跡ブランチに反映する。
git pullリモートリポジトリの更新を取得し、ローカルのリモート追跡ブランチに反映する。
さらに現在のローカルブランチにマージする。
git fetch –all全てのリモートリポジトリの更新を取得して、ローカルの全てのリモート追跡ブランチに反映する。
git pull –all全てのリモートリポジトリの更新を取得して、ローカルの全てのリモート追跡ブランチに反映する。
さらに現在のローカルブランチにマージする。

ローカルのリモート追跡ブランチ
→ 隠しフォルダである「.git」と言ってもいいですかね。

Q
git fetchの使いどころは?
A

例えば、マージ前に事前にログを確認することが出来ます。

Q
複数のリモートリポジトリを持つケースって何よ?
A

例えば、OSS貢献において、自分でforkしたリポジトリの両方を見たい場合でしょうか。
・オリジナル:origin
・自分用:upstream
→ 両方に更新を取り込む場合に、git fetch –allコマンドを使えば良い。
その他の例として、複数のGitホスティングサービスを利用していて、バックアップなどで切り替えたい場合など。

※リポジトリの追加は、「git remote add <リモート名> <リモートURL>」で可能です。リモート名はorigin2とかupstreamとか任意の名前を付けます。

全ローカルブランチのマージ(更新)方法

コマンドでは現在のローカルブランチにしかマージしてくれません。

リポジトリ内のすべてのローカルブランチを最新の状態に更新するためには、以下のスクリプトを使用します。

このスクリプトは、リモート追跡ブランチに対してgit fetchを行い、各ローカルブランチに対してgit pullを実行します。

#!/bin/bash

# 全てのリモートリポジトリから変更を取得
git fetch --all

# 全てのローカルブランチをループで回して更新
for branch in $(git branch | sed 's/..//'); do
    echo "Switching to branch $branch"
    git checkout $branch
    echo "Pulling latest changes for $branch"
    git pull
done

# 最後に元のブランチに戻る
git checkout -

コメント

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