👻

リモートブランチをローカルにcheckoutする時のデフォルトの上流ブランチについて

2021/09/14に公開

概要

リモートブランチをローカルにchekcoutするとデフォルトで上流ブランチがセットされているので
$ git pushを実行すると上流ブランチの指定を要求するメッセージが出ずに、checkout元の上流ブランチにpushされる。

master orgin/masterからブランチを切った時の例

リモートブランチからcheckoutする

リモートリポジトリの内容を取得
$ git fetch -all

リモートブランチからcheckoutする
$ git checkout -b branch_from_origin/master origin/master

チェックアウトしたブランチの上流ブランチを確認すると、元のリモートブランチがセットされていることがわかる。(ここではorigin/master)
このまま $ git pushすると元のリモートブランチにpushされてしまう。

$ git branch -vv
>>
.
.
branch_from_origin/master <commit id> [origin/master] <commit message>
.

ローカルブランチからcheckoutする

$ git checkout -b branch_from_master master

チェックアウトしたブランチの上流ブランチを確認すると、上流ブランチは設定されていないことがわかる。

$ git branch -vv
>>
.
.
branch_from_master <commit id> <commit message>
.

このまま$ git pushすると、

fatal: The current branch branch_from_master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin branch_from_master

となり、上流ブランチをセットする必要がある。

Discussion