web-dev-qa-db-ja.com

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

リモートブランチを追跡する新しいブランチを作成する方法は知っていますが、 既存のブランチをリモートブランチに追跡するにはどうすればよいですか。

私は.git/configファイルを編集することができるだけですが、もっと簡単な方法があるはずです。

3296
Pat Notz

ブランチ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`を常に実行する必要があるのですか?

4013
Dan Moulding

次の操作を実行できます(masterでチェックアウトされていて、リモートブランチmasterにpushしたいと仮定して)。

まだ持っていない場合は「リモート」を設定します

git remote add Origin ssh://...

追跡することを知るようにマスターを設定します。

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

そしてプッシュ:

git Push Origin master
224
Paul Hedderly

これは、次のように-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と言いたくなりましたが、ローカルブランチ "Origin/master"を現在チェックアウトされているブランチと統合するようにGitに指示しています。このオプションは非推奨です。代わりに新しい--set-upstream-to(手短に使える-u)オプションを使用してください。

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

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

あるいは単に

$ git branch --set-upstream-to=Origin/foo foo
145
Greg Bacon

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

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
51
James Mead

実際に受け入れられた答えが働くために:

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

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

前のコマンドが続き、ローカルブランチを追跡ブランチに昇格させます。

42
wu-lee

1:ローカルメタデータを更新します。 git fetch --all

enter image description here

2-を使用してあなたのリモートブランチとローカルブランチを表示します。 git branch -a

enter image description here

3-リモートとリンクしたいターゲットブランチに切り替えます。

git checkout branchName

例:

enter image description here

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

gitブランチ--set-upstream-to nameOfRemoteBranch

N.B: nameOfRemoteBranch :ステップ2の出力からコピーする "git branch -r"

使用例

enter image description here

32

必ず実行してください。

git config Push.default tracking

問題なくプッシュできるように

22
romanlv

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

手作業でファイルを弄りたくない場合(そしてそれを行うのはそれほど難しいことではありません)、git configを使用してそれを行うことができます...ただし、.git/configファイルを編集するだけです。

もちろん、git checkoutを使用するときに(たとえば、--trackフラグを渡すことによって)リモートブランチを自動的に追跡する方法はありますが、これらのコマンドは既存のブランチではなく new branchesで機能します。

21
mipadi

とても短い

git branch --set-upstream yourLocalBranchName Origin/develop

これはあなたのyourLocalBranchNamedevelopと呼ばれるリモートブランチを追跡するようにします。

16
MadNik

1.6.xの場合、 git_remote_branch ツールを使用して実行できます。

grb track foo upstream

これによりGitはfooupstream/fooを追跡するようになります。

14
wik

ここでは、githubgit version 2.1.4を使って、以下のようにします。

$ git clone [email protected]:user/repo.git

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

$ git remote show Origin

* remote Origin
  Fetch URL: [email protected]:user/repo.git
  Push  URL: [email protected]: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 [email protected]:user/repo.git
$ git checkout develop
8
Dr Beco

'--track'オプションを使う

  • git pullの後に:

    git checkout --track <remote-branch-name>

  • または

    git fetch && git checkout <branch-name>

8
Loukan ElKadi

次のコマンドを使用します(あなたのローカルブランチ名は "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
8
yrazlik

新しいブランチを作成するために、以下のコマンドを使用できます。

  git checkout --track -b example Origin/example 

  git branch -u発行元/リモートブランチ名
6
jithu reddy

これはこの質問に対する直接的な答えではありませんが、アップストリームブランチを設定しようとしたときに私と同じ問題を抱えている可能性がある人のためにここにメモを残したいと思いました。

Push.default に注意してください。

古いバージョンのgitでは、デフォルトは matching でした。これは、たとえば次のような場合、非常に望ましくない動作を引き起こす可能性があります。

Origin/masterへのローカルブランチ「master」トラッキング

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

「上流」ブランチで「git Push」を試みた場合、 Push.defaultマッチングを使用して gitはローカルブランチの「master」を自動的に「upstream/master」にマージしようとします。 。

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

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

4
Tom Mettam

やや関連した方法で、私は既存のブランチにリモートトラッキングブランチを追加しようとしましたが、そのリモートトラッキングブランチを追加したいシステム上のそのリモートリポジトリにアクセスできませんでした。そのリモートへのプッシュへのアクセス権を持つ別のシステムへのsneakernetを介したレポ)。まだ取得されていないローカルにリモートブランチを追加することを強制する方法はないことがわかりました(そのため、ローカルにブランチがリモートに存在することを認識していなかったため、エラーが発生します:the requested upstream branch 'Origin/remotebranchname' does not exist)。

結局、私は.git/refs/remotes/Origin/remotebranchnameに新しいヘッドファイルを追加し、それからref(eyeballingが最速、lam)をシステムにコピーすることによって、以前は未知だった新しいリモートブランチを追加することができました。 (私がリモートブランチを追加していたローカルレポジトリで)Originをワークステーションにレポジトリします。

それが終わったら、git branch --set-upstream-to=Origin/remotebranchnameを使うことができます

4
Ville

または単純に:

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

[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 
3
zee

私のように、あなたのローカルブランチ名をリモートブランチ名と同期させたいだけの人のために、これは便利なコマンドです:

git branch -u Origin/$(git rev-parse --abbrev-ref HEAD)
1
Constantinos