#結論
リモート追跡ブランチに移動するコマンドは、'git checkout origin/ブランチ名'
ローカルの作業ブランチに移動するコマンドは、'git checkout ブランチ名'
######リモート追跡ブランチはローカルのブランチである。
※リモート追跡ブランチ=トラッキングブランチ
#経緯
リモートブランチにcheckoutする際、originとブランチ名の間に'/'が必要か迷う事があった。
git checkoutするコマンドは'/'が必要で、git pushするコマンドは'/'が必要ない。
git checkout origin/ブランチ名
git push origin ブランチ名
####この'/'の有無はどういう意味?
#疑問
①git checkout origin ブランチ名だとリモートブランチにcheckoutできないの?
②git push origin/ブランチ名だとリモートブランチにpushできないの?
③origin/とブランチ名がくっついているのにorigin/ブランチ名を1つのブランチ名として認識されないの?
この疑問を解決するため、検証を実施します。
#検証
###①'git checkout origin ブランチ名'でcheckoutできるのか
develop/#2の状態からgit checkout origin develop/#1を実行
masahiro@MacBook-Air project % git branch
develop/#1
* develop/#2
master
masahiro@MacBook-Air project % git checkout origin develop/#1
error: pathspec 'origin' did not match any file(s) known to git
error: pathspec 'develop/#1' did not match any file(s) known to git
→エラー発生
翻訳すると、
エラー:pathspec'origin'がgitで認識されているファイルと一致しませんでした
エラー:pathspec'develop/#1'はgitに認識されているどのファイルとも一致しませんでした
###②'git push origin/ブランチ名'でpushできるのか
develop/#1の状態から'git push origin/develop/#1'を実行
masahiro@MacBook-Air project % git branch
* develop/#1
develop/#2
master
masahiro@MacBook-Air project % git push origin/develop/#1
fatal: 'origin/develop/#1' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
→エラー発生
翻訳すると、
致命的:'origin/develop/#1'はgitリポジトリではないようです
致命的:リモートリポジトリから読み取ることができませんでした
正しいアクセス権があることを確認してください
リポジトリが存在します。
####検証結果:①、②ともにエラーが発生し実行できませんでした。
#考察
①のエラーでは'origin'と'develop/#1'がgitにありませんと認識している。
→疑問③の'origin/ブランチ名'を1つのブランチ名として認識されているのでは?
②のエラーでは'origin/develop#1'はリモートリポジトリから読み取れませんでした。
→リモートに存在しないということ?
まだ納得できないので納得できる記事を探しました。
#調査結果
下記の記事により納得することができました。
・git checkoutについて→https://www-creators.com/archives/1388#git_checkout
・git fetch,marge,pullについて→https://qiita.com/wann/items/688bc17460a457104d7d
・トラッキングブランチについて→https://yu8mada.com/2018/08/11/how-to-confirm-and-set-up-tracking-branches-in-git/#content-1
#まとめ
git の仕様上、作業ブランチをリモートブランチに切り替えて直接更新することはできない。
'origin/ブランチ名'はリモートブランチではなくリモート追跡ブランチであり、
リモート追跡ブランチ(トラッキングブランチ)はローカルブランチであることが分かりました。
git初心者の私は、'git checkout origin/ブランチ名'でリモートブランチに移動していると思っていたが、
リモートブランチではなく、実際はローカルに存在するリモート追跡ブランチでした。
この違いを知っていれば、コマンド実行時に'/'で悩まされなくて済むと思います。
そして今回、トラッキングブランチの存在ついても知る事ができました。
ここの知識も深めていく必要があると感じました。