221

git の基本的な概念を理解するには、正しい方向に進んでいると思います。

すでにリモート リポジトリをセットアップしてクローンを作成しました。また、サーバー側の空のリポジトリを作成し、ローカル リポジトリをそれにリンクしました。

私の問題は、次の違いを理解していないことです。

  • origin/master と remotes/origin/master の比較

私の知る限り、masterはローカル ブランチであり、remotes/origin/masterはリモート ブランチです。

しかし、origin/masterとは正確には何ですか?

4

7 に答える 7

230

リモートリポジトリのクローンを作成して実行しますgit branch -a(git が認識しているすべてのブランチを表示するため)。おそらく次のようになります。

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

ここでmasterは、ローカル リポジトリのブランチです。 という名前のリモートで名前が付けremotes/origin/masterられたブランチです。次のように、これをいずれかとして参照できます。masteroriginorigin/master

git diff origin/master..master

次のように参照することもできますremotes/origin/master

git diff remotes/origin/master..master

これらは、同じものを参照する 2 つの異なる方法です (ちなみに、これらのコマンドはどちらも「リモートmasterブランチと自分のmasterブランチの間の変更を表示してください」という意味です)。

remotes/origin/HEADは、default branchという名前のリモートのoriginです。originこれにより、の代わりに簡単に言うことができますorigin/master

于 2012-05-14T17:56:41.020 に答える
115

私のようなダミーのための短い答え(トレックから盗まれた):

  • オリジン/マスターは「前回チェックしたときにマスターがいた場所」です
  • マスターは「私がやってきたことに基づいてマスターがここにいるところ」です
于 2013-02-17T05:48:08.387 に答える
40

技術的には、Git リポジトリには実際には「リモート」のものはまったくありません1。別の異なるリポジトリの名前に対応する必要があるローカル名だけがあります。名前origin/whateverが付けられたものは、最初はクローン元のレポのものと一致します。

git clone ssh://some.where.out.there/some/path/to/repo # or git://some.where...

他のリポジトリのローカル コピーを作成します。途中で、そこにあったすべてのブランチと、それらが参照するコミットを記録し、名前の下にそれらをローカル リポジトリに貼り付けますrefs/remotes/origin/

git fetch「some.where.out.thereの私のコピー」を更新する前に、または同等のものをどれだけ前に行ったかに応じて、ブランチが変更され、新しいブランチが作成され、一部が削除される場合があります。あなたがgit fetch(またはgit pull実際にはフェッチとマージである)行うと、リポジトリは新しい作業のコピーを作成し、必要に応じてすべてのrefs/remotes/origin/<name>エントリを変更します。すべてが一致するのは、その ingの瞬間ですfetch(まあ、それと最初のクローン、およびいくつかのpushing のケースも - 基本的に Git がチェックする機会を得たときはいつでも - ただし、以下の警告を参照してください)。

Git では通常、自分自身refs/heads/<name>を just<name>と呼び、リモートのものをorigin/<name>と呼びます。どれがどれであるかが明らかであるため、すべてが機能します。自明なブランチ名を作成することは時々可能ですが、それが起こるまで心配する必要はありません。:-) Git にわかりやすい最短の名前を付けるだけで、そこから移動できます: origin/master「前回チェックしたときに master があった場所」とmaster「私が行ったことに基づいて、master がここにいた場所」です。 . 必要に応じて実行git fetchして、「マスターがそこにある場所」で Git を更新します。


警告: 1.8.4 より古いバージョンの Git にgit fetchは、「マスターがそこにある場所」を更新しないモードがいくつかあります (より正確には、リモート追跡ブランチを更新しないモード)。git fetch origin、またはgit fetch --all、または単にgit fetchを実行すると、更新されます。ランニングgit fetch origin master はしません。残念ながら、この「更新しない」モードは通常の によってトリガーされgit pullます。(これは主に小さな煩わしさであり、Git 1.8.4 以降で修正されています。)


1さて、 「リモート」と呼ばれるものがあります。でもそれもローカル!名前originは、Git が「リモート」と呼ぶものです。基本的には、クローンを作成したときに使用した URL の短い名前です。originインのorigin/master由来でもあります。この名前origin/masterリモート トラッキング ブランチと呼ばれ、特に古いドキュメントや非公式のドキュメントでは、「リモート ブランチ」と短縮されることがあります。

于 2012-05-14T18:09:51.470 に答える
8
  1. origin - これは、リモートを指すカスタムで最も一般的な名前です。

$ git remote add origin https://github.com/git/git.git--- このコマンドを実行して、github プロジェクトを origin にリンクします。ここで原点はユーザー定義です。 次の方法で名前を変更できます$ git remote rename old-name new-name


  1. master - Git のデフォルトのブランチ名は master です。リモート コンピューターとローカル コンピューターの両方に。

  1. origin/master - これは、リモート リポジトリの master ブランチを参照する単なるポインタです。原点がリモートを指すと言ったことを思い出してください。

$ git fetch origin- オブジェクトと参照をリモート リポジトリからローカル コンピューター [origin/master] にダウンロードします。つまり、を使用してマージしない限り、ローカルの master ブランチには影響しません$ git merge origin/master。このコマンドを実行する前に、マージする必要がある正しいブランチをチェックアウトすることを忘れないでください

注: フェッチされたコンテンツは、リモート ブランチとして表されます。Fetch を使用すると、変更をプロジェクトのコピーに統合する前に確認することができます。自分とリモートの間の変更を表示するには$git diff master..origin/master

于 2016-12-13T22:36:45.797 に答える
5

1つの明確化(および私を混乱させた点):

「remotes/origin/HEAD がデフォルトのブランチです」は正しくありません。

remotes/origin/master はリモート リポジトリのデフォルト ブランチでした (最後にチェックしたとき)。HEAD はブランチではなく、ブランチを指すだけです。

HEAD を作業領域と考えてください。このように考えると、作業領域ファイルを特定のブランチのものに変更することに関して、「git checkout branchname」は理にかなっています。ブランチ ファイルを作業領域に「チェックアウト」します。すべての実用的な目的での HEAD は、作業領域で表示されるものです。

于 2013-09-06T15:04:09.867 に答える