何が起きたのか
新しいローカルブランチを作成して git push を実行したところ、次のエラーが表示されました:
fatal: The current branch feature/my-branch has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin feature/my-branch
このブランチは作成したばかりで、一度もプッシュされていません。Gitはどのリモートブランチと通信すべきか分かっていないのです。main や master のようなブランチはリモートとあらかじめ紐付けられていることが多いですが、ローカルで作成したブランチは、明示的に設定するまでアップストリームのマッピングが存在しません。
今すぐ直す方法
Gitがすでに答えを教えてくれています。そのまま実行しましょう:
git push --set-upstream origin feature/my-branch
または、日常的によく使われる短縮形:
git push -u origin feature/my-branch
どちらも同じ動作をします。ブランチが origin にプッシュされ、Gitがそのマッピングを記憶します。以降、このブランチで git push や git pull を実行するたびに、追加のフラグなしで動作するようになります。
ブランチ名を入力したくない場合
代わりに HEAD を使いましょう:
git push -u origin HEAD
HEAD は常に現在チェックアウトしているブランチを指します。ブランチ名が fix/PROJ-2847-auth-token-expiry のように長い場合に便利です。
修正が正しく適用されたか確認する
プッシュ後に次のコマンドを実行してください:
git branch -vv
角括弧内にリモートトラッキング参照が表示されているか確認します:
* feature/my-branch a1b2c3d [origin/feature/my-branch] コミットメッセージ
角括弧が表示されていない場合、アップストリームはまだ設定されていません。git status でも確認できます。正しくトラッキングされているブランチには、「Your branch is up to date with 'origin/feature/my-branch'」 のような表示が出ます。
-u を二度と入力しない — 恒久的な解決策
週に何度も新しいブランチをプッシュするなら、毎回このフラグを入力するのは面倒です。グローバル設定を一つ変更するだけで、この問題を完全になくせます:
git config --global push.autoSetupRemote true
この設定以降、新しいブランチで普通に git push を実行するだけで、自動的にプッシュされてアップストリームが設定されます。フラグ不要。手間なし。ただし、この機能には Git 2.37 以降(2022年7月リリース)が必要です。
まずバージョンを確認しましょう:
git --version
古いバージョンを使っている場合は、代わりにこちらを使ってください:
git config --global push.default current
ローカルブランチと同じ名前のリモートブランチにプッシュします。ただし、アップストリームのトラッキング参照は記録されません。引数なしで git pull を使うには、一度だけ -u が必要です。それでも、プッシュ自体が失敗することはなくなります。
リモートが複数ある場合
フォークを使って作業している場合、origin(自分のフォーク)と upstream(元のリポジトリ)の2つのリモートがあることが多いです。どちらにプッシュするかを明示しましょう:
# 現在のリモートを確認する
git remote -v
# 自分のフォークにプッシュする
git push -u origin feature/my-branch
# 元のリポジトリにプッシュする(書き込み権限がある場合)
git push -u upstream feature/my-branch
プッシュせずにリンクする方法
チームメンバーが作成したブランチや、引き継いだ作業のブランチなど、リモートブランチがすでに存在する場合もあります。その場合はプッシュ不要です。ローカルブランチをリモートブランチに紐付けるだけでOKです:
git branch --set-upstream-to=origin/feature/my-branch
短縮フラグ版:
git branch -u origin/feature/my-branch
git fetch 実行後にこれを使うと、余分なコミットやプッシュなしでリモートブランチをトラッキングできます。
まとめ
- 新しいローカルブランチにはアップストリームがなく、Gitは自動でプッシュしません。
- 即時対処:
git push -u origin HEAD - 恒久的な解決策(Git 2.37+):
git config --global push.autoSetupRemote true - 確認方法:
git branch -vv

