追跡ブランチとは何ですか?


173

誰かがgitに適用される「追跡ブランチ」を説明できますか?

git-scm.comの定義は次のとおりです。

Gitの「追跡ブランチ」は、リモートブランチに接続されているローカルブランチです。そのブランチをプッシュしてプルすると、接続先のリモートブランチに自動的にプッシュしてプルします。

常に同じ上流のブランチから新しいブランチにプルし、「git pull」を明示的に使用したくない場合は、これを使用します。

残念ながら、gitは新しく、SVNからのものなので、その定義は私にはまったく意味がありません。

私は「The Pragmatic Guide to Git」(ちなみに素晴らしい本)を読んでいますが、ブランチを追跡することは良いことであり、最初のリモート(この場合はオリジン)を作成した後で、マスターブランチをトラッキングブランチとして設定しますが、残念ながら、トラッキングブランチが優れている理由、マスターブランチをオリジンリポジトリのトラッキングブランチとして設定することで得られるメリットについては説明しません

誰かが私を(英語で)教えてくれますか?


6
用語の注意:Gitのtrackという単語は非常にひどく過負荷になっています。追跡されているファイルと追跡されていないファイルがあります一部のブランチ名はリモート追跡ブランチと呼ばれます。--trackオプションを使用して、これらのリモート追跡ブランチの1つを上流として設定した(ローカル)ブランチを作成できます。用語は2006年から2019年の間に多少進化したため、異なる人々はこれらの単語のそれぞれによって異なる何かを意味する場合があります。
トレック

私は個人的に、「ブランチ」という単語もかなりオーバーロードされているため、リモート追跡ブランチの代わりに「リモート追跡名」というフレーズを使用することをお勧めします。リモートトラッキング名は、次のようになります。リポジトリにありますが、他の Gitリポジトリで見られるブランチ名をGitで記憶する方法です。あなたが単語を使用する場合、上流あなたのことを言って、より近代的な用語であり、た、そのように設定上流、あなたはすべて、この用語の混乱を避けることができます。origin/masteroriginmasterorigin/master
トレック

回答:


141

ProGitの本は持っている非常に良い説明を

ブランチの追跡

リモートブランチからローカルブランチをチェックアウトすると、いわゆるトラッキングブランチが自動的に作成されます。トラッキングブランチは、リモートブランチと直接的な関係を持つローカルブランチです。トラッキングブランチを使用してと入力するとgit push、Gitはプッシュ先のサーバーとブランチを自動的に認識します。また、git pullこれらのブランチのいずれかで実行すると、すべてのリモート参照がフェッチされ、対応するリモートブランチに自動的にマージされます。

リポジトリを複製すると、通常、オリジン/マスターを追跡するマスターブランチが自動的に作成されます。それが理由でgit pushありgit pull、他の引数なしでそのまま使用できます。ただし、必要に応じて他のトラッキングブランチを設定できます。つまり、起点でブランチを追跡せず、マスターブランチを追跡しないブランチです。単純なケースは、今見た例で、を実行していgit checkout -b [branch] [remotename]/[branch]ます。Gitバージョン1.6.2以降を使用している場合は、--track省略形を使用することもできます。

$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"

リモートブランチとは異なる名前でローカルブランチを設定するには、ローカルブランチ名が異なる最初のバージョンを簡単に使用できます。

$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"

これで、ローカルブランチsfは自動的ににプッシュしたり、プルしたりしorigin/serverfixます。

ボーナス:追加git status情報

トラッキングブランチを使用すると、トラッキングブランチのgit status後方にどれだけいるかが表示されます-変更をまだプッシュしていないことを思い出させるのに役立ちます!次のようになります。

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

または

$ git status
On branch dev
Your branch and 'origin/dev' have diverged,
and have 3 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)


21
「リモートブランチからローカルブランチをチェックアウトすると、いわゆるトラッキングブランチが自動的に作成されます。」それは誤解を招くものです。--trackオプションがないと、作成したブランチは追跡されません。
JohnO、2011年

@JohnO、それをプロGitの人に取り上げたいかもしれません。本全体は、大規模な編集コラボレーションIIRCの結果です。
Assaf Lavie

2
@ JohnO、によると:sbf5.com/~cduan/technical/git/git-4.shtml --trackはデフォルトでオンになっているため、必要ありません。
Hank Lin

50

以下は、GIT追跡ブランチに関する私の個人的な学習ノートです。うまくいけば、将来の訪問者にとって役立つでしょう。

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください


ブランチの追跡と「git fetch」:

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください


メモをありがとう!可能であれば、それらをすべて共有していただけませんか。ありがとう。
Aditya

@Aditya:この質問はブランチを追跡するためのもので、このトピックに関するすべてのメモを投稿しました。他のGITノートを投稿できる他の関連する質問を見つけたら、喜んでそうします。
hagrawal

ありがとう!私が意味したのは、それらをあなたのブログか何かに投稿することでした:)。素敵なメモをありがとう!
Aditya

@Aditya:ああ、なるほど。今、あなたはあなたが何を意味するかについて明確です。私は自分のウェブサイトで遅れをとっていますが、まだ自分用に作成していません。
hagrawal

43

プロGitの本 次のように述べています

トラッキングブランチは、リモートブランチと直接関係するローカルブランチです。

ではない正確に。SOの質問「理解に苦労しているgit-fetch」には以下が含まれます。

このようなローカル追跡ブランチの概念はなく、リモート追跡ブランチのみです。
だから、origin/masterリモート追跡ブランチはのためにあるmasteroriginレポ。

しかし実際には、次の間に上流ブランチ関係を確立する

  • のような地元の支店 master
  • のようなリモート追跡ブランチ origin/master

次に、あなたが考えることができますmasterとしてローカルのトラッキングブランチ:それは追跡し、リモート追跡ブランチ origin/master順番に、のmasterブランチを追跡、上流のレポを origin

代替テキスト


画像の明確化:マイコンピュータは、発生より2コミット先です。ここで、masterからの2つのコミットが行われます。画像:progit.org/book/ch3-5.html
idbrii

私は正しく解釈していますか?originと上流にリモートが設定されている場合、ローカルのマスターブランチはoriginを直接追跡し、上流は間接的に追跡しますか?例:git status起点とアップストリームの両方のリポジトリに関してコミット追跡メッセージを受け取るときは?(セットアップ:私は誰かのレポをローカルで複製し、私のGitHubアカウントの新しいレポに自分のクローンをプッシュし、ローカルで起点とアップストリームのリモートをgithubレポと複製された複製レポにそれぞれ設定しました)。
SherylHohman 2017年

3
@SherylHohmanいいえ:ローカルブランチは「直接」または「間接」には何も追跡しません。割り当てるリモート追跡ブランチを追跡します。フォークの場合、ベストプラクティスは、一般的なブランチ(マスターなど)の上流(元のリポジトリ)を追跡し、新しいブランチ(PRまたは機能ブランチ)のオリジン(リモートフォーク)を追跡することです。stackoverflow.com
VonC、2017年

2
@VonC-「ローカルトラッキングブランチという概念はなく、リモートトラッキングブランチのみ」というステートメント。興味深いb / cブランチの周りにそのような矛盾する用語があります。これはよく参照されるリンクweb.archive.org/web/20130419172453/http://www.gitguys.com/…で「追跡ブランチ」と「リモート追跡ブランチ」を区別します。彼らはorigin / masterを「リモートトラッキングブランチ」と呼んでいます-同意しますが、「master」を「トラッキングブランチ」とも呼びます。マスタートラッキングとは何ですか?それらは間違っていますか、それとも用語の問題ですか?
Howiecamp 2017

2
@Howiecampが「マスターと呼ばれる追跡ブランチ」と呼んでいるものは、リモートトラッキングブランチのオリジン/マスターが関連付けられたローカルブランチマスターであり、リモートマスターブランチに関してオリジンからフェッチされた最後のSHA1を記憶しています。したがって、これは「上流ブランチを持つローカルブランチ」を指定するための「ショートカット」です
VonC

7

これは、追跡ブランチを追加して新しいブランチにプルできるようにする方法です。

git branch --set-upstream-to origin/Development new-branch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.