GitHubで作成された新しいリモートブランチを追跡する


183

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

  1. ローカルに新しいブランチを作成する
  2. この新しいブランチが新しく作成されたリモートブランチを追跡するようにします。

どうすれば適切に実行できますか?


2
git checkout --track -b <ローカルブランチ> <リモート> / <トラックブランチ>も機能します。
MLister 2012年

14
...または単にgit checkout -t <remote>/<whatever>。リモート追跡ブランチが1つしかない場合は、<whatever>それを実行git checkout <whatever>してgitが意味を推測することもできます。
Mark Longair-2012年

回答:


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

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

--track オプションはリモートブランチに対してデフォルトで有効になっており、省略できます。


3
これを行うと、警告が表示されます。refname 'branch-name'があいまいです。
ウルトラサウルス2014年

19
そのブランチ名を持つリモートブランチが1つしかない場合は、それを行うだけでgit checkout <branchname>、gitが自動的にチェックアウトし、追跡ブランチをセットアップします。@Mark Longairがこのコメントで上に言ったことを繰り返し述べたかっただけです:stackoverflow.com/questions/11262703/…
Ryan Walls

私のリモートブランチの名前はremotes/origin/develop?それだけorigin/developじゃないの?これらは同じですか?
アレックス

2
私はしgit fetch --allなければなりませんでした。そうしないと、新しいブランチがフェッチされませんでした
mschrimpf 2018

Eclipseでこれを行う方法?それらが終わったらcmd、日食は新しいブランチを検出しますか?
デッカード

31

既存のローカルブランチがない場合は、次のように非常に簡単です。

git fetch
git checkout <remote-branch-name>

たとえば、フェッチしてと呼ばれる新しいリモートトラッキングブランチがある場合は、次のようにしますorigin/feature/Main_Page

git checkout feature/Main_Page

これにより、リモートブランチと同じ名前のローカルブランチが作成され、そのリモートブランチが追跡されます。同じブランチ名のリモートが複数ある場合は、あいまいさの少ないものを使用できます。

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

ローカルブランチをすでに作成していて、それを削除したくない場合は、「既存のGitブランチをリモートブランチに追跡させる方法は?」を参照してください


1
git checkout 1.5-branchremotes/upstream/1.5-branchはの出力にありますgit branch -a)結果をerror: pathspec '1.5-branch' did not match any file(s) known to git.これに変更するgit checkout upstream/1.5-branchと、HEADが切り離され、ローカルブランチは作成されません。答えのこの部分は単に間違っていると思います。これはgit 2.4.3
Piotr Dobrogostによるもので、

最初のコマンドは、git 1.9.3では、別のリモートでも機能します。この動作が変更された可能性があります。2番目のコマンドの結果は、私が期待するものです。-tを使用しない場合は、リモートでその特定のバージョンを確認する以外のことを実行することを指定していません。
kotoole 2015年

1
私は@PiotrDobrogostに同意します。「これにより、同じ名前のローカルブランチが作成されます...」というステートメントは誤っていると思います。フェッチ行うこと(この方法で呼び出される場合)は、リモートの各ブランチに対してリモート追跡ブランチを作成することです。これは、という名前のローカルリポジトリ上のブランチを意味します<remote>/<branch>。リモート追跡ブランチは読み取り専用で、最後のフェッチでそのブランチがリモートのどこにあったかを示します。checkoutそのブランチrefを呼び出すと、Piotrが言うように、デタッチされたHEADモードになります。フェッチするリモートブランチを指定すると、不要なリモートトラッキングブランチの作成を回避できることに注意してください。
scanny

2
もう一度明確にするために:コマンドを使用することをお勧めし git checkout feature-branchます。私はgit checkout origin/feature-branch 、あなたが両方とも指摘したように、役に立たないヘッドが外れるコマンドを使用することを提案していません 。
kotoole

はるかにシンプルで要領を得ています。cygwin上のgit 2.8.3で正常に動作します。
フェリペアルバレス

29

まず、リモートリポジトリを取得する必要があります。

git fetch remoteName

新しいブランチを作成して、必要なリモートブランチを追跡するようにセットアップできます。

git checkout -b newLocalBranch remoteName/remoteBranch

また、指定された最大値として、「git checkout -b」の代わりに「git branch --track」を使用することもできます。

git branch --track newLocalBranch remoteName/remoteBranch

checkout -b開始点としてリモートブランチを使用する場合、実際にを使用する必要はありません--track

5
また、このコメントで指摘されているように、だけを実行git checkout <branchname>し、同じ名前のリモートブランチがある場合(を実行した後git fetch)、ローカルブランチは自動的にリモートブランチを追跡するように設定されます。

9

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

git checkout master
git push origin master

または、開発ブランチがある場合

git checkout dev
git push origin dev

またはリモートブランチが存在する場合

git branch dev -t origin/dev

リモートブランチをプッシュする他の可能性がいくつかあります。


次に、3番目のオプションを選択します。リモートブランチが存在する場合、ローカルブランチを作成してリモートブランチを追跡できます。
ルネHöhle
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.