1. ホーム
  2. git

[解決済み] Gitにおいて、origin/masterとorigin masterの違いは何ですか?

2022-02-09 13:36:41

質問内容

知っています。 起源 はリモートリポジトリの用語であり マスター はそこのブランチです。

私はここで意図的に "コンテキスト" を省略しており、答えはコンテキストに依存しないことを望んでいます。では、git のコマンドラインでは、次のような違いがあるのでしょうか。 オリジン/マスター オリジンマスタ . を使うべきかを理解するための曖昧でない方法はありますか? オリジン/マスター を使用する必要があります。 オリジンマスタ ?

解決方法は?

( 注意 この質問が投稿された当初は、"master" が Git のブランチのデフォルト名でした。現在は "main" がデフォルト名となっているので、この回答は "main" を使うように更新しました。この方が、Git を初めて使う人にとってより自然であることを願っています)。

ここには、実は3つのものがあるんです。 origin main は2つの別々のものであり origin/main は1つのものです。 合計3つのもの

2つのブランチ

  • main はローカルブランチ
  • origin/main はリモート追跡ブランチ(これは ローカルコピー リモートの "origin" という名前のブランチの "main" という名前のブランチの)

リモートは1つ。

  • origin はリモート

origin/mainはリモートですか?

origin/main ブランチはローカルです! から取得するときはいつでも origin , origin/main が更新されます。しかし origin/main が古くなることもあり得ます。 main にはもう存在しない。 origin . を使用することができます。 --prune オプション ( -p ) と共に git fetch を使用すると、追跡しているブランチが削除された場合、リモート追跡ブランチを自動的に削除することができます。

その origin/main ブランチは ではなく への参照またはポインタです。 main のブランチです。 origin . ローカルコピーです。

例:2ステップでプル

から origin/main はブランチなので、それをマージすることができます。 ここでは、2つのステップでプルを行います。

ステップ1:フェッチ main をリモート origin . その main の分岐を origin が取得され、ローカルコピーの名前は origin/main .

git fetch origin main

そして origin/mainmain .

git merge origin/main

そして、新しい変更を main に戻す。 origin :

git push origin main

その他の例

名前で複数のブランチを取得することができます...

git fetch origin main stable oldstable

複数のブランチをマージすることができます...

git merge origin/main hotfix-2275 hotfix-2276 hotfix-2290

別の名前にすることはできますか?

ローカルブランチの名前は必要ありません。 main ということです。リモートブランチと同じ名前である必要はないのです! たとえば、自分のブランチに次のような名前をつけるとしましょう。 alice を追跡させることができます。 origin/main :

簡単にできるんですよ。

git checkout -b alice --track origin/main

ローカルブランチの名前が alice という名前ですが、リモートブランチは main であり、ローカルコピーは origin/main . これなら全然OK! ちょっとわかりにくいかもしれませんが、もしかしたら、すでに 異なる という名前のブランチがあります。 main で、別の変更を行うために別のブランチに切り替える必要があります。