TL; DRバージョン:origin/master以前はリモートトラッキングブランチが存在していましたが、現在は存在しないため、ローカルブランチsourceは存在しないものを追跡しているため、疑わしいだけです。 Gitはそれについて警告しています。「アップストリームトラッキング」機能が意図したとおりに機能することなく問題なく進んでいるため、何かを変更するかどうかはあなた次第です。
アップストリーム設定の別の方法については、なぜ「git push --set-upstream origin <branch>」を実行する必要があるのかを参照してください。
この警告はGitの新しいもので、Git 1.8.5で最初に登場しました。リリースノートには、短い箇条書きが1つだけ含まれています。
- 「git branch -v -v」(および「git status」)は、他のブランチに基づいていないブランチ、上流のブランチと同期しているブランチ、および上流で設定されているブランチを区別しませんでした存在しないブランチ。
それが何を意味するかを説明するには、まず「リモート」、「リモート追跡ブランチ」、およびGitが「アップストリームの追跡」を処理する方法について知る必要があります。(リモートトラッキングブランチはひどく欠陥のある用語です。代わりにリモートトラッキング名を使い始めましたが、これは少し改善されたと思います。ただし、以下では、Gitのドキュメントとの整合性を保つために「リモートトラッキングブランチ」を使用します。 )
それぞれ、「リモート」のように、単に名前であるoriginか、octopressこのケースでは。それらの目的は、あなたgit fetchまたはgit pull更新元の場所の完全なURLなどを記録することです。1を使用すると、Gitは(保存されたURLを使用して)そのリモートにアクセスし、適切な一連の更新を引き継ぎます。また、「リモート追跡ブランチ」を使用して更新を記録します。git fetch remote,
「リモート追跡ブランチ」(またはリモート追跡名)は、単に「リモート」で最後に見たブランチ名の記録です。各リモートはそれ自体がGitリポジトリであるため、ブランチがあります。リモートの "origin"のブランチは、のローカルリポジトリに記録されますremotes/origin/。あなたが示したテキストは、名前付きブランチがあることを言うsourceにはorigin、名前付きの支店2.1、linklogなどにoctopress。
(もちろん、「通常」または「ローカル」ブランチは、自分のリポジトリに作成したブランチ名にすぎません。)
最後に、(ローカル)ブランチを設定して、「リモートトラッキングブランチ」を「追跡」することができます。ローカルブランチLがリモートトラッキングブランチを追跡するように設定されるとR、GitはRその「アップストリーム」を呼び出して、(コミットに関して)アップストリームの「先」または「後ろ」のどちらであるかを通知します。これは、ローカルブランチのために(でもお勧め可能な)普通のことだとリモート追跡の枝のように、(リモートプレフィックス部分を除く)と同じ名前を使用するsourceとorigin/source、それは実際には必要ありません。
そしてこの場合、それは起こっていません。sourceリモート追跡ブランチを追跡するローカルブランチがありorigin/masterます。
Gitがリモートブランチを追跡するためにローカルブランチをセットアップする方法の正確なメカニズムを知っている必要はありませんが、それらは以下に関連するので、これがどのように機能するかを示します。まず、ローカルブランチ名から始めますsource。この名前を使用する2つの構成エントリー、spelled branch.source.remoteおよびがありbranch.source.mergeます。表示された出力から、両方が設定されていることが明らかであるため、指定されたコマンドを実行すると、次のように表示されます。
$ git config --get branch.source.remote
origin
$ git config --get branch.source.merge
refs/heads/master
これらをまとめると、2これは、ブランチsourceが「リモート追跡ブランチ」を追跡することをGitに伝えますorigin/master。
しかし、今度はの出力を見git branch -aてください。これは、リポジトリ内のすべてのローカルおよびリモート追跡ブランチ名を示しています。リモートトラッキング名はremotes/...にリストされ、はありませんremotes/origin/master。おそらく一度はあったと思われますが、今はなくなっています。
Gitは、を使用して追跡情報を削除できることを通知しています--unset-upstream。これは、両方をクリアしますbranch.source.originとbranch.source.merge、警告を停止します。
しかし、あなたが望むのは、追跡から別のものの追跡に切り替えるorigin/masterことです。おそらくorigin/source、octopress/名前の1つです。
これはgit branch --set-upstream-to、3で実行できます。例:
$ git branch --set-upstream-to=origin/source
(もしあなたがまだブランチ「ソース」origin/sourceにいて、それがあなたが望むアップストリームであると仮定します-でも、もしあれば、実際にあなたが望むものを私が知る方法はありません)。
(既存のGitブランチをリモートブランチに追跡させる方法も参照してください。)
ここにたどり着いた方法は、最初にを作成したgit cloneときに、クローン元からブランチにブランチがあったことだと思いますmaster。master追跡するように設定されたブランチもありましたorigin/master(これはgitの通常の標準セットアップです)。これは、あなたが持っていた意味branch.master.remoteとbranch.master.mergeセットにoriginしてrefs/heads/master。しかし、その後、originリモコンの名前がからmasterに変更されましたsource。一致するように、あなたのローカル名もからmasterに変更したと思いますsource。これにより、設定の名前がbranch.master.remoteto branch.source.remoteとfrom branch.master.mergeからbranch.source.merge...に変更されましたが、古い値が残っているため、branch.source.merge間違っていました。
「上流」のリンケージが壊れたのはこの時点でしたが、1.8.5より古いGitバージョンでは、Gitは壊れた設定に気づくことはありませんでした。1.8.5ができたので、これが指摘されています。
これはほとんどの質問をカバーしますが、「修正する必要があるか」という質問はカバーしません。(例えば)を実行することにより、何年にもわたって壊れやすさを回避している可能性があります。それを続ければ、問題は回避されます。つまり、いいえ、それを修正する必要はありません。必要に応じて、を使用してアップストリームを削除し、苦情を停止できます。ローカルブランチにアップストリームがないとマークされていなくてもかまいません。git pull remote branchgit pull origin source--unset-upstreamsource
アップストリームを持つことのポイントは、さまざまな操作をより便利にすることです。たとえば、アップストリームが正しく設定されている場合、通常、「git fetchフォローするgit merge」は「正しいことを行います」。git statusその後git fetch、そのブランチのリポジトリがアップストリームのリポジトリと一致するかどうかを通知します。
便利にしたい場合は、アップストリームを再設定してください。
1git pullはを使用しgit fetch、Git 1.8.4以降、これは(ついに!)「リモート追跡ブランチ」情報も更新します。古いバージョンのGitでは、更新はgit pullでのみリモート追跡ブランチに記録されませんでしたgit fetch。Gitは少なくともバージョン1.8.5でなければならないため、これは問題ではありません。
2さて、これに加えて、私が故意に無視している構成行は、の下にありremote.origin.fetchます。Gitは「マージ」名をマッピングして、リモートブランチの完全なローカル名がであることを理解する必要がありrefs/remotes/origin/masterます。それは予測可能ですので、マッピングは、ほとんど常に、しかし、ちょうどこのように動作しますmasterになりますorigin/master。
3それとも、とgit config。アップストリームorigin/sourceを変更する必要がある唯一の部分に設定したい場合はbranch.source.merge、それgit config branch.source.merge refs/heads/source
を行います。しかし--set-upstream-to言う何あなたがそうそれは「より良い方法」だというあなたは手動でそれを自分で行う行く作るよりも、行って欲しいです。