2012-06-29 13 views
145

githubプロジェクトのリモートマスターブランチを追跡しているローカルマスターブランチを既に取得しています。さて、私の協力者が同じプロジェクトに新しいブランチを作成している、と私はそれに応じて次の操作を実行したい:GitHubで作成された新しいリモートブランチを追跡します

  1. は、この新しいブランチは、新たにリモートブランチを作成して追跡しますローカル
  2. 新しいブランチを作成します。

どうすればよいですか?

+1

git checkout --track -b /も動作します。 – MLister

+10

...または単に 'git checkout -t /​​'です。'​​'で終わるリモートトラッキングブランチが1つしかない場合は、 'git checkout​​'を実行してgitが何を意味するかを推測することもできます。 –

+0

[既存のGitブランチはリモートブランチをどのように追跡するのですか?](http://stackoverflow.com/q/520650/456814)を参照してください。 –

答えて

196
git fetch 
git branch --track branch-name origin/branch-name 

最初のコマンドは、ローカルリポジトリにリモートブランチがあることを確認します。 2番目のコマンドは、リモートブランチを追跡するローカルブランチを作成します。リモート名はorigin、ブランチ名はbranch-nameとします。

--trackリモートブランチではデフォルトでこのオプションが有効になっていますが、省略することができます。

+3

これを行うと、私は警告を受け取ります:refname 'branch-name'があいまいです。 – Ultrasaurus

+14

そのブランチ名を持つリモートブランチが1つしかない場合は、 'git checkout 'を実行するだけでgitが自動的にチェックアウトしてトラッキングブランチを設定します。このコメントで@ Mark Longairが言ったことを繰り返したがっています:http://stackoverflow.com/questions/11262703/how-to-track-a-new-remote-branch-created-on-github#comment14806580_11262703 –

+0

私のリモートブランチの名前は 'remotes/origin/develop'ですか?それはちょうど「起源/発展」であってはなりませんか?これらは同じですか?ありがとう。 –

5

ブランチがリモートブランチでない場合、ローカルブランチをリモートに直接プッシュできます。

git checkout master 
git push origin master 

か、のdevの枝

git checkout dev 
git push origin dev 

を持っているか、リモートブランチが存在する場合

git branch dev -t origin/dev 

は、リモートブランチをプッシュする他のいくつかのposibilitesがあるとき。

+0

ありがとう。しかし、私はここで遠隔支店を押したいとは思っていません... – MLister

+0

3番目のオプションを取ってください。リモートブランチが存在するときは、ローカルブランチを作成し、リモートブランチを追跡することができます:)それは、最大ではあるがより短いバージョンと同じです。 – Stony

26

リモートリポジトリフェッチする必要がまず第一に:あなたは新しいブランチを作成し、必要なリモートブランチを追跡するためにそれを設定することができるよりも

git fetch remoteName 

を:

git checkout -b newLocalBranch remoteName/remoteBranch 

することができます"git checkout -b"の代わりに "git branch --track"をmaxを指定して使用してください。

git branch --track newLocalBranch remoteName/remoteBranch 
+0

リモートブランチを出発点として 'checkout -b'を実行すると、実際に' --track'を使う必要はありません。 –

+5

また、[このコメント](http://stackoverflow.com/questions/11262703/how-to-track-a-new-remote-branch-created-on-github#comment32122710_11262780)で指摘されているように、 'git checkout 'を実行し、同じ名前のリモートブランチがある場合( 'git fetch'を実行した後)、ローカルブランチは自動的にリモートのものを追跡するように設定されます。 –

23

既存のローカルブランチを持っていない場合、それは本当にのように単純です:あなたが取得しorigin/feature/Main_Pageと呼ばれる新しいリモート追跡ブランチがある場合

例えば
git fetch 
git checkout <remote-branch-name> 

、ただやります

git checkout feature/Main_Page 

これにより、リモートブランチと同じ名前のローカルブランチが作成され、そのリモートブランチが追跡されます。あなたは同じ支店名を持つ複数のリモコンを持っている場合は、あなたが少なく曖昧を使用することができます:あなたはすでにローカルブランチを作って、それを削除したくない場合は

git checkout -t <remote>/<remote-branch-name> 

How do you make an existing Git branch track a remote branch?を参照してください。

+0

'git checkout 1.5-branch'(' remotes/upstream/1.5-branch'は 'git branch -a'の出力にあります)の結果、' error:pathspec '1.5-branch'は既知のファイルと一致しませんでしたこれを 'git checkout upstream/1.5-branch'に変更すると、HEADが分離され、ローカルブランチは作成されません。私は答えのこの部分が単に間違っていると思います。これはgitとあります。2.4.3 –

+0

最初のコマンドはgit 1.9.3で私のために働きます。この動作が変更されている可能性があります。 2番目のコマンドの結果は、私が期待しているものです。 -tを指定しないと、リモート上のその特定のバージョンを見る以外に何もしないことを指定していません。 – kotoole

+1

私は@PiotrDobrogostと同意しますが、私はあなたのステートメント "これは同じ名前のローカルブランチを作成します..."と誤解しています。フェッチ*は(この方法と呼ばれる場合)リモートの各ブランチに対して*リモートトラッキングブランチ*を作成します。つまり、ローカルレポのブランチは、「/」となります。リモートトラッキングブランチは読み取り専用で、最後にフェッチしたときにそのブランチがリモートにあった場所を示します。そのブランチrefで 'checkout'を呼び出すと、Piotrと同じように、分離したHEADモードになります。リモートブランチをフェッチするように指定すると、不要なリモートトラッキングブランチが作成されることはありません。 – scanny

関連する問題