既存のGitブランチをリモートブランチに追跡させますか?


3535

リモートブランチを追跡する新しいブランチを作成する方法を知っていますが、既存のブランチをリモートブランチに追跡させる方法を教えてください。

.git/configファイルを編集できることはわかっていますが、もっと簡単な方法があるはずです。


26
下記のとおり、既存のブランチの場合はを使用できますgit push -u origin branch-name
Zags 2014年

3
ローカルブランチが現在のブランチであり、ローカルブランチがまだリモートを追跡していないgit pull場合、追跡情報を設定する適切なコマンドに関する役立つメッセージが表示されることがよくあります
billrichards

57
gitのドキュメントへのリンクが表示されるようにgitを学習しているときは、煩わしいです。そのドキュメントは、gitで何をしいるのかをすでに知っている人向けに書かれているようです。
フェリペアルバレス

9
Git 2.10以降では、まず目的のローカルブランチにチェックアウトしてから、これを実行する必要がありますgit branch --set-upstream-to origin/<branch>
Mahdi Javaheri 2017

2
--set-upstreamエラーが発生しますfatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.ので、git branch --set-upstream-to origin/<branch name>働く現在のコマンドがあります。
スーパージェイド

回答:


4270

ブランチfooとリモートを考えるとupstream

Git 1.8.0現在:

git branch -u upstream/foo

または、ローカルブランチfooが現在のブランチでない場合:

git branch -u upstream/foo foo

または、より長いコマンドを入力する場合は、上記の2つと同等です。

git branch --set-upstream-to=upstream/foo

git branch --set-upstream-to=upstream/foo foo

Git 1.7.0以降:

git branch --set-upstream foo upstream/foo

ノート:

  • 上記のコマンドはすべて、ローカルブランチfooがリモートfooからリモートブランチを追跡するようにしますupstream
  • 古い(1.7.x)構文は廃止され、新しい(1.8+)構文が採用されました。新しい構文は、より直感的で覚えやすいものにすることを目的としています。
  • まだフェッチされていない新しく作成されたリモートに対して実行すると、上流ブランチの定義は失敗します。その場合はgit fetch upstream事前に実行してください。

参照:なぜ常に「--set-upstream」を実行する必要があるのですか?


124
「上流」はリモコンの名前ですか?つまり、ほとんどの場合、デフォルトで「オリジン」と呼ばれるものは何ですか。
Andrew Vit

172
@Andrew:はい。git branch --set-upstream master origin/master最初にリポジトリを複製したときに自動的に行われることと同じです。
Dan Moulding、

62
関連するメモとして、これをgitconfigに追加するのはすばらしいです: "[push] default = tracking"これにより、pushがプル元と同じ場所に移動するようになります:)
jpswain

61
「致命的:有効なオブジェクト名ではありません: 'origin / master'」と表示されます。
joachim

84
git push -u origin foo 経由
綿

236

以下を実行できます(マスターでチェックアウトされていて、リモートブランチマスターにプッシュする場合)。

「リモート」をまだ設定していない場合は、セットアップします

git remote add origin ssh://...

次に、追跡することを認識するようにマスターを構成します。

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

そしてプッシュ:

git push origin master

それは本当にリモートとブランチがプッシュで必要ですか?つまり、チェックアウトしたブランチがプッシュしたいブランチでない場合にのみ必要ですよね?
Doppelganger、

5
はい-しかし、最初のプッシュでは、メモリから明示する必要がある場合があります。もちろん簡単にテストできます... :)
ポールヘダリー

+1これは、1.8より前のmsysgit "プレビュー"に悩まされているWindowsユーザーに対する答えです。それをありがとう。
John

3
これが私にとってうまくいった唯一の答えです。受け入れられた回答を試したところ、既存のブランチのアップストリームリモートを設定するために、次の結果を得ましたerror: the requested upstream branch 'upstream/master' does not exist
スティーブK

4
@SteveKこれは、アップストリームが呼び出されorigin、呼び出されないことが原因と考えられますupstream
ウムラウト

160

私は-uオプションでプッシュすることの副作用としてこれを行います

$ git push -u origin branch-name

同等の長いオプションは--set-upstreamです。

git-branchまた、このコマンドは理解し--set-upstreamますが、その使用は混乱することができます。バージョン1.8.0ではインターフェースが変更されています。

git branch --set-upstreamは非推奨であり、比較的遠い将来削除される可能性があります。 git branch [-u|--set-upstream-to]より公正な議論の順序で導入されました。

言いたくはgit branch --set-upstream origin/masterありましたが、Gitはローカルブランチの「origin / master」を、現在チェックアウトされているブランチと統合するように調整するように指示しています。このオプションは非推奨です。代わりに新しい--set-upstream-to(短くて甘い-u)オプションを使用してください。

ローカルfooブランチがあり、そのブランチを上流と同じ名前で処理したいとします。これを実現する

$ git branch foo
$ git branch --set-upstream-to=origin/foo

あるいは単に

$ git branch --set-upstream-to=origin/foo foo

1
これは芋はるかに優れたソリューションです
Nils_e

--set-upstream-to=...私が探していたものです。
Richard

54

このgit_remote_branchツールは便利かもしれません。リモートブランチを作成、公開、削除、追跡、名前変更するための簡単なコマンドを提供します。優れた機能の1つは、grbコマンドを実行して、実行するgitコマンドを説明できることです。

grb explain create my_branch github
# git_remote_branch version 0.3.0

# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch

3
grb

6
OPはGit自体について質問しています。そのため、新しいツールを導入しないほうがよいでしょう。
zeekvfu 2014年

grbは、私のmacOSインストールでのgit-rebaseのエイリアスです。私はこれをしませんでした:)
ベン・シンクレア

53

実際に受け入れられた答えが機能するためには:

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa

ローカルブランチはすでにブランチを追跡していたため、リモートリポジトリがすでに追加されていると想定できます。
Doppelganger、

Dopplerganger:受け入れられた回答に対するjoachimのコメントを参照してください。とにかく仮定は容易に異なります-それが物事をとても面白くするものです;)
ハリネズミ

44

Git 1.5.xの早い段階で、このようにローカルブランチを$BRANCHリモートブランチorigin/$BRANCHに追跡させることができると思います。

ことを考える$BRANCHorigin/$BRANCH存在し、現在チェックアウトされていないました$BRANCH(離れてあなたが持っている場合、スイッチ)、実行します。

git branch -f --track $BRANCH origin/$BRANCH

これ$BRANCHは追跡ブランチとして再作成されます。-f関わらず、作成を強制的に$BRANCH既存の。--track通常のデフォルトが設定されている場合(つまり、git-configパラメーターbranch.autosetupmergeがtrueの場合)はオプションです。

origin/$BRANCHまだ存在しない場合は、次のコマンドでローカル$BRANCHをリモートリポジトリにプッシュすることで作成できます。

git push origin $BRANCH

前のコマンドの後に、ローカルブランチをトラッキングブランチに昇格させます。


1
git push origin $BRANCH私が探していたものでした。
ユーザー

上記のようにアップストリームを設定するなど、あらゆる種類のソリューションを試した後、何も機能しませんでした。私がやりたかったのは、リモートコミットからローカルブランチに新しいコミットを1つプルすることだけで、最初はトラッキングを設定していません。コマンドgit branch -f --track $BRANCH origin/$BRANCHはトリックを行います。
DemitryT 2014

38

1- git fetch --allを使用してローカルメタデータを更新します

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

2-を使用してリモートブランチとローカルブランチを表示します。git branch -a 、次のスクリーンショットを参照

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

3-リモートにリンクする対象のブランチに切り替えます:使用

git checkout branchName

例:

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

4-次を使用して、ローカルブランチをリモートブランチにリンクします。

git branch --set-upstream-to nameOfRemoteBranch

NB:nameOfRemoteBranch:手順2の出力からコピーする "git branch -r"

使用例:

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


1
主に簡単でシンプルな答え。
vibs2006 2017

25

必ず実行してください:

git config push.default tracking

トラブルをなくすことができる


1
これは便利かもしれません。ただし、git-config(1)マニュアルページによれば、のtracking非推奨の同義語であることに注意することができますupstream
FooF

23

編集.git/configがおそらく最も簡単で最速の方法です。とにかく、リモートブランチを処理するためのGitコマンドが実行していることです。

ファイルを手作業でいじりたくない場合(そしてそれを行うのはそれほど難しいことではない場合)、いつでもgit configそれを行うことができます...しかし、繰り返しになりますが、それ.git/configはとにかくファイルを編集するだけです。

もちろん、使用時にリモートブランチを自動的に追跡する方法git checkout--trackフラグを渡すなど)がありますが、これらのコマンドは既存のブランチではなく、新しいブランチで機能します。


18

非常に短い

git branch --set-upstream yourLocalBranchName origin/develop

これにより、yourLocalBranchNameトラックがと呼ばれるリモートブランチになりdevelopます。


1
@Quincy Check gregの回答 - 代わりにgit push -u origin branch(または--set-upstream-to)を使用
Tobias Kienzler 2013年

@MadNik、違いは何である--set-upstreamとは--track?なぜどちらを使うべきかよくわかりません。
Acumenus 2014年


12

次のコマンドを使用します(ローカルブランチ名が「branch-name-local」で、リモートブランチ名が「branch-name-remote」であるとします)。

$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local

ローカルブランチとリモートブランチの両方が同じ名前の場合は、次の手順を実行します。

$ git branch --set-upstream-to=origin/branch-name branch-name

コマンドラインで「branch-name」と「origin / branch-name」を逆にしました。アップストリームはローカルの前に来ます。
maharvey67 2018年

@ maharvey67ありがとうございます。回答を編集しました。
yrazlik 2018年

これは金でした。ありがとう、また、ブランチ名にスラッシュがある場合、受け入れられた回答内のどのオプションも問題ない
JBoy

8

ここでは、githubおよびを使用してgit version 2.1.4、次のようにします。

$ git clone git@github.com:user/repo.git

そしてリモートはローカルにリンクされていなくてもitelsefによって来ます:

$ git remote show origin

* remote origin
  Fetch URL: git@github.com:user/repo.git
  Push  URL: git@github.com:user/repo.git
  HEAD branch: master
  Remote branches:
    develop tracked         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    master  tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

しかしもちろん、まだローカルブランチはありません:

$ git branch
* master                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

見る?これで、develpをチェックアウトするだけで、魔法が自動的に実行されます。

$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'

とても簡単!


概要。次の2つのコマンドを実行するだけです。

$ git clone git@github.com:user/repo.git
$ git checkout develop

1
私の同一のユースケースの優れた例。ローカルの「開発」ブランチの兆候はありませんが、「開発」ブランチをチェックアウトすると、そのブランチが表示され、リモートブランチの「開発」をオリジンから追跡するように魔法のように設定されています。ステップバイステップの例と説明に感謝します!
ElliotPsyIT 2018年


7

新しいブランチを作成するには、次のコマンドを使用できます

 git checkout --track -b example origin / example 
すでに作成されたブランチの場合、リモート間にリンクを作成し、そのブランチから以下のコマンドを使用します

 git branch -u origin / remote-branch-name


5

これはこの質問への直接の回答ではありませんが、上流のブランチを構成するときに私と同じ問題が発生している可能性がある人のために、ここにメモを残したいと思いました。

push.defaultに注意してください

古いgitバージョンでは、デフォルトはと一致していました。たとえば、次のような場合、非常に望ましくない動作が発生します。

オリジン/マスターへのローカルブランチ「マスター」トラッキング

アップストリーム/マスターへのリモートブランチ「アップストリーム」追跡

「upstream」ブランチで「git push」しようとした場合、push.defaultに一致する gitは自動的にローカルブランチ「master」を「upstream / master」にマージしようとし、非常に多くの混乱を引き起こします。

これにより、より健全な動作が得られます。

git config --global push.defaultアップストリーム


あなたはこれを無駄にしないでください。ありがとう。
stefgosselin 2017

4

多少関連する方法で、既存のブランチにリモートトラッキングブランチを追加しようとしましたが、そのリモートトラッキングブランチを追加したいシステムのリモートリポジトリにアクセスできませんでした(これのコピーを頻繁にエクスポートするため)そのリモートにプッシュするアクセス権を持つ別のシステムにスニーカーネット経由でリポ)。まだフェッチされていないローカルにリモートブランチを強制的に追加する方法がないことがわかりました(ローカルがリモートにブランチが存在することをローカルが知らなかったため、エラーが発生しました:)the requested upstream branch 'origin/remotebranchname' does not exist

最後に、新しいヘッドファイルを追加して、以前は不明だったリモートブランチを(フェッチせずに)追加.git/refs/remotes/origin/remotebranchnameし、原点からのアクセス権を持つシステムからref(eyeballingが最も速く、不完全だった;-)をコピーしました。ワークステーションへのリポジトリ(リモートブランチを追加したローカルリポジトリを使用)。

それが終わったら、私はそれから git branch --set-upstream-to=origin/remotebranchname


3

または単に:

まだブランチにいない場合は、ブランチに切り替えます。

[za]$ git checkout branch_name

走る

[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.

そしてあなたは準備ができています:

 [za]$ git push origin branch_name

あなたは設定ファイルを見て、何を実行して何が何を追跡しているかを見ることができます:

 [za]$ git config -e

これを知っておくのもいいです。追跡されているブランチと追跡されていないブランチが表示されます。:

  [za]$ git remote show origin 

0

私のように、ローカルブランチ名とリモートブランチ名を同期したい人のために、便利なコマンドを示します。

git branch -u origin/$(git rev-parse --abbrev-ref HEAD)

0

メッセージを受け取るたびに何をする必要があるか覚えておくの避けるには

マージするブランチを指定してください。詳細はgit-pull(1)
を参照してください。
.....

現在のブランチの上流originに設定する次のスクリプトを使用できます。

私の場合、デフォルトの上流としてorigin以外のものを設定することほとんどありません。また、ローカルブランチとリモートブランチのほとんどの場合、同じブランチ名を保持します。だから、以下は私に合います:

#!/bin/bash
# scriptname: git-branch-set-originupstream
current_branch="$(git branch | grep -oP '(?<=^\* )(.*)$')"
upstream="origin/$current_branch"
git branch -u "$upstream"

-1

これも機能します

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