「mainブランチじゃなくてdevelopブランチをpullしたい」 「リモートの別ブランチの変更を取り込みたい」 「他の人が作ったブランチを自分のローカルに持ってきたい」 「pullしたら違うブランチが更新されちゃった…」
チーム開発でよくある悩みですよね。
git pullは便利なコマンドですが、ブランチ指定を間違えると思わぬトラブルに。正しくブランチを指定してpullする方法を知れば、スムーズな開発が可能になります。
今回は、git pullでブランチを指定する全方法から、よくあるトラブルの解決法まで、完全解説していきます!
git pullの仕組みを理解する

git pullとは何をしているか
git pullの正体:
git pull = git fetch + git merge
つまり:
1. リモートの最新情報を取得(fetch)
2. 現在のブランチにマージ(merge)
デフォルトの動作
# 現在のブランチに設定された上流ブランチからpull
git pull
# 実際に実行されるのは:
git fetch origin
git merge origin/現在のブランチ名
ブランチを指定してpullする方法
方法1:基本的なブランチ指定
# リモート名とブランチ名を指定
git pull origin develop
# 完全な構文
git pull <リモート名> <ブランチ名>
# 例:originのmainブランチをpull
git pull origin main
# 例:upstreamのdevelopブランチをpull
git pull upstream develop
方法2:現在のブランチに別のブランチをpull
# 現在mainブランチにいて、developの変更を取り込みたい
git checkout main
git pull origin develop
# これは以下と同じ:
git fetch origin develop
git merge origin/develop
方法3:リモートブランチを新規作成してpull
# リモートにあるが、ローカルにないブランチを取得
# 方法A:fetchしてからcheckout
git fetch origin
git checkout -b feature/new-feature origin/feature/new-feature
# 方法B:直接checkout(Git 2.23以降)
git checkout feature/new-feature
# 方法C:trackingを明示的に設定
git checkout -b feature/new-feature --track origin/feature/new-feature
よくある使用シナリオ
シナリオ1:別のブランチの最新を現在のブランチに取り込む
# 現在feature/loginブランチで作業中
# developブランチの最新を取り込みたい
# 方法1:pullを使う
git pull origin develop
# 方法2:fetchとmergeを分ける(推奨)
git fetch origin develop
git merge origin/develop
# 方法3:rebaseを使う(履歴をきれいに保つ)
git pull --rebase origin develop
シナリオ2:フォーク元の変更を取り込む
# フォークしたリポジトリで作業中
# オリジナル(upstream)の変更を取り込む
# 1. upstreamを追加(初回のみ)
git remote add upstream https://github.com/original/repository.git
# 2. upstreamから最新を取得
git fetch upstream
# 3. upstreamのmainを現在のブランチにマージ
git pull upstream main
# または、自分のmainを更新してからマージ
git checkout main
git pull upstream main
git push origin main # 自分のリモートも更新
シナリオ3:特定のコミットまでpull
# 特定のコミットまでの変更だけ取り込みたい
# 1. まずfetch
git fetch origin
# 2. 特定のコミットまでマージ
git merge <commit-hash>
# またはcherry-pickで特定のコミットだけ
git cherry-pick <commit-hash>
上流ブランチの設定と管理
上流ブランチを設定する
# 現在のブランチに上流ブランチを設定
git branch --set-upstream-to=origin/develop
# 短縮形
git branch -u origin/develop
# 新しいブランチ作成時に設定
git checkout -b feature/new --track origin/develop
# pushと同時に設定
git push -u origin feature/new
上流ブランチの確認
# 現在のブランチの上流を確認
git branch -vv
# すべてのブランチの上流を確認
git branch -vv --all
# 詳細な設定を確認
git config --get branch.$(git branch --show-current).remote
git config --get branch.$(git branch --show-current).merge
上流ブランチの変更
# 上流ブランチを変更
git branch --set-upstream-to=origin/main
# 上流ブランチを削除
git branch --unset-upstream
pullのオプションと戦略

マージ戦略を指定
# Fast-forwardのみ許可(マージコミットを作らない)
git pull --ff-only origin main
# 常にマージコミットを作成
git pull --no-ff origin main
# rebaseを使用(履歴を直線的に保つ)
git pull --rebase origin main
# rebase中にコンフリクトが起きたら
git pull --rebase=interactive origin main
自動スタッシュ機能
# ローカルの変更を一時退避してpull
git pull --autostash origin main
# 手動でstashする場合
git stash
git pull origin main
git stash pop
詳細な出力を表示
# 詳細な情報を表示
git pull --verbose origin main
# 統計情報も表示
git pull --stat origin main
# ドライラン(実際には実行しない)
git pull --dry-run origin main
よくあるエラーと解決方法
エラー1:There is no tracking information
# エラーメッセージ
There is no tracking information for the current branch.
# 原因:上流ブランチが設定されていない
# 解決策1:上流ブランチを設定
git branch --set-upstream-to=origin/main
# 解決策2:明示的に指定してpull
git pull origin main
エラー2:Diverged branches
# エラーメッセージ
Your branch and 'origin/main' have diverged
# 原因:ローカルとリモートで履歴が分岐
# 解決策1:マージ
git pull origin main
# 解決策2:rebase
git pull --rebase origin main
# 解決策3:強制的にリモートに合わせる(危険!)
git fetch origin
git reset --hard origin/main
エラー3:Conflict during merge
# コンフリクトが発生
# 1. コンフリクトを確認
git status
# 2. ファイルを編集してコンフリクトを解決
# <<<<<<<, =======, >>>>>>> マーカーを削除
# 3. 解決したファイルをステージング
git add <resolved-file>
# 4. マージを完了
git commit
# またはマージを中止
git merge --abort
エラー4:Permission denied
# 原因:認証の問題
# HTTPS の場合:トークンを更新
git config --global credential.helper cache
# SSH の場合:鍵を確認
ssh -T git@github.com
# リモートURLを確認
git remote -v
実践的なワークフロー
機能ブランチワークフロー
# 1. 最新のdevelopから機能ブランチを作成
git checkout develop
git pull origin develop
git checkout -b feature/new-feature
# 2. 作業中に定期的にdevelopの変更を取り込む
git fetch origin develop
git merge origin/develop
# または
git pull --rebase origin develop
# 3. 完成したらdevelopにマージ
git checkout develop
git pull origin develop
git merge feature/new-feature
git push origin develop
リリースブランチワークフロー
# リリースブランチを作成
git checkout -b release/1.0.0 develop
# mainの最新を確認
git fetch origin main
# ホットフィックスがあればmainから取り込む
git pull origin main
# リリース準備完了後、mainとdevelopにマージ
git checkout main
git pull origin main
git merge --no-ff release/1.0.0
git push origin main
git checkout develop
git pull origin develop
git merge --no-ff release/1.0.0
git push origin develop
便利なエイリアスと設定

pullを効率化するエイリアス
# ~/.gitconfig に追加
[alias]
# 現在のブランチの上流から pull
pl = pull
# rebase で pull
plr = pull --rebase
# 指定ブランチから pull
plo = "!f() { git pull origin $1; }; f"
# develop から pull
pld = pull origin develop
# main から pull
plm = pull origin main
# upstream から pull
plu = pull upstream main
# fetch してから merge
fm = "!f() { git fetch origin $1 && git merge origin/$1; }; f"
# 使用例
git plr # git pull --rebase
git plo develop # git pull origin develop
git pld # git pull origin develop
グローバル設定
# デフォルトでrebaseを使用
git config --global pull.rebase true
# Fast-forwardのみ許可
git config --global pull.ff only
# 自動スタッシュを有効化
git config --global rebase.autoStash true
スクリプトで自動化
複数ブランチを一括更新
update_all_branches.sh:
#!/bin/bash
# すべてのローカルブランチを更新
current_branch=$(git branch --show-current)
# すべてのブランチをループ
for branch in $(git branch | sed 's/\*//g'); do
echo "Updating $branch..."
git checkout $branch
git pull origin $branch
done
# 元のブランチに戻る
git checkout $current_branch
echo "All branches updated!"
安全なpullスクリプト
safe_pull.sh:
#!/bin/bash
# 変更を保存してから安全にpull
# 未コミットの変更をチェック
if [[ -n $(git status -s) ]]; then
echo "Stashing local changes..."
git stash push -m "Auto stash before pull $(date +%Y%m%d-%H%M%S)"
fi
# Pull実行
echo "Pulling from origin..."
git pull origin $(git branch --show-current)
# Stashがあれば復元
if git stash list | grep -q "Auto stash before pull"; then
echo "Restoring stashed changes..."
git stash pop
fi
ベストプラクティス
pullの前に確認すること
# 1. 現在のブランチを確認
git branch --show-current
# 2. 未コミットの変更を確認
git status
# 3. リモートの状態を確認
git fetch --dry-run
# 4. 差分を確認
git log HEAD..origin/main --oneline
安全なpullのための習慣
# fetchとmergeを分ける
git fetch origin
git log HEAD..origin/main # 変更内容を確認
git merge origin/main # 問題なければマージ
# pullする前にcommitまたはstash
git add .
git commit -m "WIP: Save before pull"
# または
git stash push -m "Before pull"
まとめ – 正確なブランチ指定でスムーズな開発を
git pullでのブランチ指定、完全マスターできましたか?
基本を押さえる
✅ git pull origin ブランチ名
– 基本形
✅ 上流ブランチの設定 – 効率的な運用
✅ --rebase
オプション – きれいな履歴
✅ fetchとmergeの分離 – 安全な更新
トラブル回避のポイント
- pullの前に必ず
git status
- 上流ブランチを正しく設定
- コンフリクトに備える
- 定期的にfetchで最新情報取得
効率化のコツ
- エイリアスで時短
- スクリプトで自動化
- チームでルールを統一
- ブランチ戦略を明確に
正しいブランチ指定で、チーム開発がもっとスムーズになります。自信を持ってpullコマンドを使いこなしていきましょう!
コメント