質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.58%

master vs origin/master vs remotes/origin/master

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,659

proglabo

score 2276

知識が希薄なため、見当違いな質問があるかと思いますが、その場合は、その質問は無視していただいて、私のGITに対する認識の修正になるような回答をいただければと思います

質問1(まずは以下をご覧ください)

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/test_branch


master と origin/master と remotes/origin/masterの違いと関係性を教えてください。

質問2
git fetchするとローカルのorigin(HEAD?)がリモートの最新COMMITになるとの記述を目にしましたが、上記の出力を見るにorigin/masterとremotes/origin/masterがあることから、origin(という領域?)はローカルにもリモートにもあるということでしょうか?

質問3
「git pull」はgit fetchでローカルのoriginをリモートの最新COMMITに合わせてからgit merge origin/masterでマージしているという記述を目にしましたが、もし上記の質問2でリモートにもorigin(という領域?)があるのならば、「git push」はリモートのoriginをローカルの最新COMMITにしてから、mergeしているということでしょうか?

質問4(まずは以下をご覧ください)

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/test_branch

$ git checkout test_branch
Switched to a new branch 'test_branch'
Branch 'test_branch' set up to track remote branch 'test_branch' from 'origin'.

$ git branch -a
  master
* test_branch
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/test_branch


上記でcheckoutしていますが、test_branchとremotes/origin/test_branchの違いがわかりません。remotes/origin/test_branchは参照だけできて、checkoutすることで変更可能なtest_branchが新たに生成されるという認識でしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

質問1

masterorigin/masterremotes/origin/masterは、すべて省略された参照名(abbrev-ref)です。

ご提示の例であれば、上記3点の(完全な)参照名はそれぞれ

  • refs/heads/master
  • refs/remotes/origin/master
  • refs/remotes/origin/master

であり、後者二つは同一のものです。

質問2

いいえ。

"origin"は、複数設定できるremoteの一種で、git-cloneしたときに設定されるデフォルト名なので、一番見かけると思いますが、
gitレポジトリには複数のremoteを設定することができます。(git remoteコマンドで操作できます)

手元の操作で見えるときの"origin"はローカルに紐づく概念で、リモートレポジトリ(サーバーとか)を指示しているだけで、これ自体が同期されているわけではないです。

質問3

質問2がいいえなので、いいえ。

git-pullしたときは、今チェックアウトされているローカルブランチの、"リモート追跡ブランチ"を更新してマージします。

(先にgit fetchを行って、refs/remotes/origin/* をすべて取り込んでから)
refs/heads/master のリモート追跡ブランチが refs/remotes/origin/master であれば、これをマージします。

質問4

その通りです。
git checkout yyyyyの時に、refs/remotes/xxxx/yyyyyがあり、refs/heads/yyyyyが存在しなければ作成されます。

上記説明に沿ってしっかり言い換えると、
git checktout test_branchにより、
refs/remotes/origin/test_branch を元に 同じSHA1ハッシュ値を指す、refs/heads/test_branch という参照が作成されたということです。

 余談

ちなみに、gitでは "origin/master"というローカルブランチを作成することができます。
これと"origin"における"master"リモートブランチは以下の通りに異なるrefnameになります。

  • refs/heads/origin/master
  • refs/remotes/origin/master

この辺の解釈を担っているのは"git rev-parse"というコマンドですが、上記の特殊な状態で"origin/master"を渡すとこの様になります。

$ git rev-parse origin/master
warning: refname 'origin/master' is ambiguous.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

私の環境では、この時返ってきたのはローカルブランチのSHA1ハッシュでした。
ローカルが優先されるようですね。

このあたりの記事が参考になると思います。

https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81
https://git-scm.com/book/ja/v2/Git%E3%81%AE%E5%86%85%E5%81%B4-Git%E3%81%AE%E5%8F%82%E7%85%A7

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る