👻
リモートブランチをローカルにcheckoutする時のデフォルトの上流ブランチについて
概要
リモートブランチをローカルに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