13

「git branch -r」を実行して取得します

原点/支店1

オリジン/ブランチ2

man ページの -r オプションは、「(-d と一緒に使用した場合) リモート追跡ブランチを一覧表示または削除します」。したがって、origin/branch1 と origin/branch2 はリモート追跡ブランチとして知られています。ただし、リモート追跡ブランチに直接コミットすることはできません (代わりに匿名ブランチが作成されます)。リモート トラッキング ブランチは、'git fetch' の実行時にリモート ブランチを単純に追跡します。

ここで、セマンティクスが少しぼやけます。私なら

git checkout -b branch1 origin/branch1

次の出力が得られます。

これが私の質問です。何が私を混乱させているのかを明確にするために、可能な限り詳細に説明します...ブランチ1を起点からリモートブランチbranch1を追跡するように設定したおかげで、「branch1」はリモート追跡ブランチと見なされますか? もしそうなら、これは「git branch -r」を実行したときに「origin/branch1」がリモート追跡ブランチとして既にリストされていたという事実と矛盾しませんか? 私の理解では、ローカル (トピック) ブランチまたはリモート追跡ブランチのいずれかが存在します。「git checkout -b branch1 origin/branch1」を実行すると、フェッチによってリモート ブランチを追跡するローカル (トピック) ブランチ (コミットを追加できるブランチ) が作成されますか? 「git branch」を実行すると「* branch1」が返され、「git branch -r」を実行しても「origin/branch1」と「origin/branch2」が返されるようになりました。コミットを追加し、origin/branch1 を追跡するために branch1 を作成しました。「git branch」の出力からの「branch1」、または「git branch -r」の出力からの「origin/branch1」のリモート追跡ブランチと見なされるのはどれですか?

4

1 に答える 1

14

これは、プロジェクトがゆっくりと修正されているように見えますが、特に厄介なgit用語についての良い質問です。

基本的に、「追跡」とは、(a)「リモート追跡ブランチ」と(b)「からbranch1リモートブランチを追跡するために設定された」という表現で非常に異なるものを意味します。簡単な要約は次のとおりです。branch1origin

  1. 「リモート追跡ブランチ」:リモート追跡ブランチは、通常はによって更新されるブランチでgit fetchあり、その結果、git pull.¹これらはリモートリポジトリ内のブランチの状態のキャッシュのように考えることができます。それらからマージしたり、それらの履歴を調べたりすることはできますが、それらに直接取り組むことはできません。このフレーズの「追跡」は、リモート追跡ブランチが最後にリモート追跡ブランチが更新されたときのリモートリポジトリ内のブランチの状態を表すことを意味します。
  2. ブランチfooは、の場所からリモートブランチバーを追跡するように設定されています。このフレーズでは、gitがローカルブランチfooをリモート追跡ブランチに関連付ける構成変数を設定していると言われていますorigin/bargit pullこれにより、ブランチfooにいるときに入力するだけで、からフェッチしてマージできるなどの優れた機能が有効になりますorigin/barfooまた、「ブランチは24コミット先にあり、origin/bar早送りできます」など、リモートトラッキングブランチに関連するブランチの状態に関するメッセージを役立てる方法でもあります。あなたはあなたの地元の支店が追跡しています リモートトラッキングブランチに関連付けられています。また、これは。に関してアップストリームと呼ばれることもありorigin/barます。foo

したがって、これらの追跡/追跡の感覚はまったく異なり、悲しいことに、それは一般的な混乱の原因です。

2番目の意味は徐々に非推奨になっているようですが、たとえば、push.default以前は可能なオプションの1つでしたtrackingが、現在はオプション名を優先して非推奨になっていますupstream


だから、あなたの質問に直接答えるには:

原点からリモートブランチbranch1を追跡するようにbranch1を設定することにより、「branch1」はリモート追跡ブランチと見なされますか?

いいえ、branch1リモートトラッキングブランチではありません。

'git checkout -b branch1 origin / branch1'を実行するとき、フェッチによってリモートブランチを追跡するローカル(トピック)ブランチ(コミットを追加できます)を作成していますか?

そうですね、一種の-それはリモート追跡ブランチの追跡(センス2)であり、後者はフェッチによってリモートリポジトリのブランチから更新されます。(個人的には、リモートトラッキングブランチを意味すると思われる場合に備えて、「リモートリポジトリ内のブランチ」を優先して、「リモートブランチ」という用語を避けようとしています。)

'gitbranch'を実行すると'*branch1'になり、'gitbranch-r'を実行すると'origin/branch1'と'origin/branch2'が得られます。コミットを追加し、origin / branch1を追跡するために、branch1を作成しました。リモートトラッキングブランチ、「git branch」の出力からの「branch1」、または「gitbranch-r」の出力からの「origin/branch1」のどちらと見なされますか?

リモートトラッキングブランチはorigin/branch1です。


git push¹リモートリポジトリ内の対応するブランチに成功すると、それらも更新されます。

于 2011-07-08T23:18:01.403 に答える