DESIGN / CODE / INFRA / AI

解説

上流ブランチを設定すると更新も入る?Gitの追跡設定と取り込みを分けよう

origin/mainを上流へ設定する前後で、現在のコミットと作業ファイルを比較。上流なし・設定・解除をローカルだけの練習で確認。

上流ブランチを設定すると更新も入る?Gitの追跡設定と取り込みを分けよう
保存リストを見る →
この記事の道しるべ 3項目

Gitで「このブランチには上流がない」と言われた。origin/mainを上流へ設定すれば、向こうの変更もすぐ手元へ入るのかな。

上流ブランチの設定は、比較や一部の操作で参照する相手を決めるもの。取得したり統合したりする操作そのものではないよ。今回はコミットとブランチの基本が分かる人向けに、新しい一時フォルダーだけで確認する。

workと、取得済みのorigin/mainを用意する

次はBashのターミナルで実行する一まとまり。共有先役のbareリポジトリも同じ一時フォルダー内に作り、インターネットへpushしない。グローバル設定を書き換える操作もないよ。

(
  set -e
  task_upstream_dir=$(mktemp -d) || exit
  git init --bare -q -b main "$task_upstream_dir/remote.git"
  git clone -q "$task_upstream_dir/remote.git" "$task_upstream_dir/author"
  cd "$task_upstream_dir/author" || exit
  printf 'base\n' > note.txt
  git add note.txt
  git -c user.name=Practice -c user.email=practice@example.invalid commit -qm base
  git push -q origin main
  git clone -q "$task_upstream_dir/remote.git" "$task_upstream_dir/reader"
  git -C "$task_upstream_dir/reader" switch -qc work --no-track
  printf 'new\n' > note.txt
  git add note.txt
  git -c user.name=Practice -c user.email=practice@example.invalid commit -qm new
  git push -q origin main
  cd "$task_upstream_dir/reader" || exit
  git fetch -q origin
  git log -1 --format=%s
  git branch --set-upstream-to=origin/main work
  git rev-parse --abbrev-ref --symbolic-full-name '@{upstream}'
  git log -1 --format=%s
  cat note.txt
  git rev-list --count 'HEAD..@{upstream}'
  git branch --unset-upstream work
)

空の共有先を最初にcloneすると警告が出るが、この例では想定した状態だよ。workは--no-trackで作り、上流のない状態から始める。

設定してもbaseのまま

readerでfetchした時点ではorigin/mainがnewへ進み、手元のworkはbaseのまま。上流設定の前後で出すコミット名は、どちらもbaseになる。note.txtもbaseの一行が残るよ。

上流の表示だけはorigin/mainになり、HEAD..@{upstream}の件数は1。これは「取得済みの比較相手には、workにないコミットが一つある」と読める。設定によって作業ファイルがnewへ変わったわけではないんだ。

普段のリポジトリで上流を確認するときは、対象のフォルダーで次の読み取りコマンドも使えるよ。

git branch -vv

実際の作業では、この一覧も上流と差の確認に使える。ただしahead・behindの比較は手元にある参照に基づくので、遠くのサーバーの最新状態を常に示すわけではないよ。

何の既定値かは、操作ごとに確認する

上流設定はpullなどの引数を省略する場合にも関係する。一方、push先はpushの設定なども関係するため、「上流を変えれば、すべての送信先が同じになる」とは決めつけないでね。

実リポジトリで設定する前に、現在のブランチ、リモートURL、取得済みの相手を確認しよう。今回の練習は上流設定を最後に解除するだけで、workのコミットを統合・削除しない。一時フォルダーは残るので、不要になった練習場所だけを後で片付けられる。

Git公式マニュアル原文を2026年10月29日に確認し、Git 2.52.0で上流の設定・解除、コミットとファイルの保持、差の1件を検証した。fetchとpull、リモート追跡参照の整理も関連するよ。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。