Gitを使って開発を進める中で、リモートリポジトリの最新の変更をローカルに取り込む必要があります。
git fetch・pullの違い
リモートリポジトリ内容の取り込みは、git pullだけ覚えておけば大抵なんとかなります。
が、ここでは違いを表でまとめておきます。
コマンド | 説明 |
---|---|
git fetch | リモートリポジトリの更新を取得し、ローカルのリモート追跡ブランチに反映する。 |
git pull | リモートリポジトリの更新を取得し、ローカルのリモート追跡ブランチに反映する。 さらに現在のローカルブランチにマージする。 |
git fetch –all | 全てのリモートリポジトリの更新を取得して、ローカルの全てのリモート追跡ブランチに反映する。 |
git pull –all | 全てのリモートリポジトリの更新を取得して、ローカルの全てのリモート追跡ブランチに反映する。 さらに現在のローカルブランチにマージする。 |
- Qgit fetchの使いどころは?
- A
例えば、マージ前に事前にログを確認することが出来ます。
- Q複数のリモートリポジトリを持つケースって何よ?
- A
例えば、OSS貢献において、自分でforkしたリポジトリの両方を見たい場合でしょうか。
・オリジナル:origin
・自分用:upstream
→ 両方に更新を取り込む場合に、git fetch –allコマンドを使えば良い。
その他の例として、複数のGitホスティングサービスを利用していて、バックアップなどで切り替えたい場合など。
※リポジトリの追加は、「git remote add <リモート名> <リモートURL>」で可能です。リモート名はorigin2とかupstreamとか任意の名前を付けます。
全ローカルブランチのマージ(更新)方法
コマンドでは現在のローカルブランチにしかマージしてくれません。
リポジトリ内のすべてのローカルブランチを最新の状態に更新するためには、以下のスクリプトを使用します。
#!/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 -
リンク
コメント