3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

git checkoutについて

Last updated at Posted at 2021-01-18

#結論

リモート追跡ブランチに移動するコマンドは、'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/ブランチ名'でリモートブランチに移動していると思っていたが、
リモートブランチではなく、実際はローカルに存在するリモート追跡ブランチでした。

この違いを知っていれば、コマンド実行時に'/'で悩まされなくて済むと思います。
そして今回、トラッキングブランチの存在ついても知る事ができました。
ここの知識も深めていく必要があると感じました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?