2016-10-20 6 views
9

私はgit repoを持っています。ローカルブランチを作成したら、ブランチをサーバにプッシュしてください。git branch -vvはトラッキングとして表示されません。ローカルブランチをサーバーにプッシュすると、トラッキングとして表示されません。

しかし、私がダウンして、新鮮なレポを引いた場合、それは私も成功せず、次の試してみたgit branch -vv

に現れません。

git config --get branch.foobranch.remote 

git config --get branch.foobranch.merge 

私は、複数のプッシュをやって、そのブランチを使い続けると、サーバーから引く場合は、すべてはので、私はそれだけでgitのブランチは、何らかの方法でリモートを追跡していることを知っていると仮定することができます動作します。私はこの情報にどのようにアクセスできるか知りたいです。

答えて

6

しかし、そこには追跡情報がありますか?

いいえ:あなたがローカルで新しいブランチを作成する際に、Gitは負いません(遠隔いるレポに)あなたがそれをプッシュする。ありません

具体的には、(-uなし)単純git pushは、ローカルブランチは、それに関連する一つ上流分岐を有している場合に設定されているローカル設定branch.<name>.remotebranch.<name>.mergeを設定しません。

最初にそのブランチをプッシュするときに、上流のレポを指定する必要があります。新しく作成されたディレクトリに

クローンリポジトリ(git branch -rを用いて可視)クローニングされたリポジトリ内の各ブランチのためのリモート追跡ブランチを作成し、作成してチェックアウト初期:git clone (man page)は異なる

複製されたリポジトリの現在アクティブなブランチからforkされたブランチです。リモート追跡ブランチので

git clone

がチェックアウトmasterを行う場合、origin/master(例えば)のために存在し、masterは自動的に上流分岐origin/masterに関連付けられると述べました。
<branch>が見つからない場合はgit checkout

を参照してくださいしかし、それ

$ git checkout -b <branch> --track <remote>/<branch> 

のと同等の扱い、一致する名前を持つ(<remote>それを呼び出す)リモート正確に一つで追跡ブランチが存在しませんクローン後にmasterから直接プッシュすることができますが、新しいブランチを作成した後に直接プッシュすることはできません(origin/newBranchリモートトラッキングブランチがローカルレポに既に存在しています)

チェックアウト(既存のリモート追跡ブランチを自動的にトラッキングするorigin/<branch>)は、ローカル設定branch.<name>.remotebranch.<name>.mergeを設定します。

+0

で追跡情報を明示的に設定せずに、そのブランチからプッシュアンドプルできます。存在しない場合、ローカルブランチをorigin/newbranchにプッシュできます。最初のプッシュではブランチが作成されます(これはサーバーの特定の実装とみなされます)。以降のプルまたはプッシュは、デフォルトとして「remote」を使用して行われます。私は "--track"を使わずにこれを常に行っています –

+0

@VincePanuccioいいえ、新しいブランチを押すと自動的にはそれを追跡しません。しかし、Repoを複製すると、答えに言及するように、同じブランチのチェックアウトを行います。 – VonC

+0

ローカルブランチを作成すると、プッシュして作成された後、トラッキング情報を入力せずにプッシュ&プルできます。あなたが思っている方法でそれを追跡していないかもしれませんが、明らかにそこに何らかの種類のリンクがあります。誰かがリモートブランチに変更を加えた場合は、追跡情報なしでそれを取り下げることができます。 –

4

これは、gitがアクションを分離したいからです。ブランチをプッシュ

は、ワンアクションブランチの上流を設定
$ git push origin feature/more_memory

は別のアクション
$ git branch --set-upstream-to=origin/feature/more_memory

です。しかしGitは常にあなたに、あなたは多くの場合、結合したいいくつかのコマンドを一緒に実行するためにエイリアスを提供しています新しいブランチをプッシュするときは、次のようにします。
$ git push -u origin feature/more_memory

追跡情報(-u)を設定します。

+0

しかし、そこから情報を追跡するのではないのですか? -u –

2

あなたは(持っている)を作成する必要がありますので、これはそれをすることによって行うことができ、リモートの上流(スタッシュ)

です: - あなたは、-uオプションをプッシュする必要があります(-u

$ git branch --set-upstream-to=origin/feature/xyz 

ちょうど私の2セント

$ git push -u origin feature/xyz 
1

)後にいったん上流分岐がuはそのブランチのために-uオプションを指定せずにプッシュすることができます追跡され、最初に行う必要があります:あなたがしたいときには、迷惑なブランチ名を再入力して得ることができますそれをレモにプッシュするテ。結局あなたはすでにそれを作成するためにそれを入力しました! HEADを使用すると解決されます。ここでは例です:

$ git push -u origin HEAD

これは、リモートにあなたの現在のローカルブランチをプッシュし、それを追跡します。その後、$ git pushを使用すると正常に動作します。

+0

リモートを追跡する必要はありませんが、とにかく起こります。それが私の質問のポイントでした。私がローカルブランチと 'git push origin branchname'を持っていれば、そのポイントからそのブランチを押して引っ張っても問題なく動作します。問題は追跡情報が欠落していますが、それでも動作します:) –

関連する問題