ブランチが追跡しているリモートを変更する方法は?


671

centralリポジトリは、新しいサーバー上に設定する必要がありましたので、私は私の地元のレポに新しいリモートを作成し、それにプッシュ。

しかし今私がそうするときgit pull、それは私が最新であると主張します。それは間違っています。新しいリモートブランチではなく、古いリモートブランチについて教えてくれています。事実、フェッチする新しいコミットがあることがわかっています。

別のリモートを追跡するようにローカルブランチを変更するにはどうすればよいですか?

これはgit構成ファイルで確認できますが、台無しにしたくありません。

[branch "master"]
    remote = oldserver
    merge = refs/heads/master

1
私はあなたのタイトルを微調整しました-あなたは実際にあなたが追跡しているリモコンを変更しようとしていますが、それでも同じブランチ名を追跡しています。
Cascabel


5
これを、既存のGitブランチをリモートブランチトラックにするにはどうすればよいですか。。その質問は、ブランチがすでにリモートブランチを追跡していることを示していません。これはします。

1
構成ファイルを編集することが、これを行う最も簡単安全な方法であるように思えます
Steven Lu

回答:


1077

git v1.8.0以降を使用:

git branch branch_name --set-upstream-to your_new_remote/branch_name

または、-uスイッチを使用できます。

git branch branch_name -u your_new_remote/branch_name

git v1.7.12以前を使用:

git branch --set-upstream branch_name your_new_remote/branch_name


2
これは私が探していたものでした-指定されたブランチのリモート追跡ブランチを変更しました。ありがとう!
joachim

7
ああ、私の悪い。誤ってブランチ名を変更しないようにできるので、私はまだそれをconfig経由で行いますが、すべて問題ありません。+1。
Cascabel

1.8.0のリリースノート:gitのブランチ--set-上流起源/マスター「それは言って誘惑された『』、それはGitはローカルブランチ手配するように指示し、 『現在チェックアウト支店と統合するために、原点/マスター』を、これは、ユーザーの意図する可能性はほとんどありません。このオプションは非推奨です。代わりに、新しい「--set-upstream-to」オプション(短くて甘い「-u」)を使用してください。
Jared Beck、

とてもきれい; _; 作成した小さな混乱を簡単に修正できました!ありがとう=))
Aditya MP

56
リモート追跡ブランチがまだ存在しないが、既存のリモート追跡ブランチが現在追跡されている場合、既存の新しいリモート追跡ブランチに変更することはできません。最初に現在のリモートトラッキングブランチの設定を解除する必要があります。git branch --unset-upstream次に、この回答で指定されたとおりに機能します(または次ので機能しますgit push -u / --set-upstream)。
hakre 2015

88

私にとっての修正は:

git remote set-url origin https://some_url/some_repo

次に:

git push

3
これがGithubが言う方法です。help.github.com/articles/changing-a-remote-s-url
fsharp

18
これは実際にはリモートがどこにあるかを変更し、追跡しているリモートを(技術的に)変更しません-「起源」を追跡していますが、起源の定義を更新するだけです。いくつかのユースケースでは、これは悪いことかもしれません。jQueryをフォークして、新しいリモートを作成するとします。「origin」はフォーク、「upstream」はjQueryです。次に、フォークではなく元のレポを一時的に追跡する必要があるとします。使用set-urlして元に戻すのを忘れた場合、将来のgit pushコマンドは失敗します
stevendesu

42

最新のgit(2.5.5)では、コマンドは次のようになります。

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

これにより、現在のローカルブランチのリモート追跡ブランチが更新されます


3
ヒットgit branch --set-upstream-to=origin/developするとエラーが発生しました:error: the requested upstream branch 'origin/develop' does not exist。以前は、リモートブランチの名前をdelelopに変更しました。
ベルゴロ2018

1
@belgoros git fetch --all多分?
Gabriel Devillers

25

何が起こっているかを細かく制御するもう1つのオプションは、手動で構成を編集することです。

git config --edit

または略記

git config -e

次に、ファイルを自由に編集して保存し、変更を適用します。


1
これは私の日を救った。ありがとう!
マーティンチェンバリン

私の問題は、2つの起源があるということでした。(originおよびorigin-algo)。しかし、ローカルマスターは "origin-algo"を追跡していました。しかし、「起源」を追跡したかったのです。これを変更できる唯一の方法は、git構成を編集することでした。
Aswin Prasad

19

あなたがそれについて正気であるならば、設定ファイルを編集することは十分に安全です。もう少し偏執的になりたい場合は、porcelainコマンドを使用して修正できます。

git config branch.master.remote newserver

もちろん、前と後にコンフィグを見ると、あなたがやろうとしていたことを正確に実行していることがわかります。

しかし、あなたの個々のケースでは、私がすることは:

git remote rename origin old-origin
git remote rename new-origin origin

つまり、新しいサーバーが正規のリモートになる場合は、元のサーバーから複製したかのように、それをoriginと呼ばないでください。


3
私は実際にこの問題を検出する前にそれを行いました-gitは賢く、リモートの名前変更を構成ファイルに伝えていたため、例では、私の構成ファイルは「old-origin」と言っていました。
joachim

個人的には、この方法は受け入れられた方法よりも概念的には理にかなっていると思いますが、機能的には同等だと思いますよね?
エヴァンDonovan

1
@Jefromi:Aは、remote renameそれは、両方のリモートの名前を変更するようを求めているものはしないだろう[remote]コンフィグとで[branch]のconfigs。したがって、この場合に必要なのは、構成ファイルを編集して、構成[remote]行で言っていること(リモートの名前変更)を実行することです。
Sumeet Pareek 2013年

7
git fetch origin
git checkout --track -b local_branch_name origin/branch_name

または

git fetch
git checkout -b local_branch_name origin/branch_name

私の場合、私は必要でしたgit fetch。私はbitbucketに新しいブランチを作成していて、それに切り替えたかったのです。gitはリモートでの変更を認識していないため、git fetch以前に行う必要がありましたgit checkout feature/new-feature-branch。これが他の誰かを助けることを願っています。
TelamonAegisthus

6

これが最も簡単なコマンドです。

git push --set-upstream <new-origin> <branch-to-track>

たとえば、コマンドgit remote -vを指定すると、次のようになります。

origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (fetch)
origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (push)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (fetch)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (push)

代わりにチームの追跡に変更するには:

git push --set-upstream team master

曖昧なものがなければ、追跡するブランチはオプションです。Githubから離れるとき、私はあなたの提案を使用しました;)ありがとうございます。
gouessej

4

現在のブランチを削除して次のようにすることができます:

git branch --track local_branch remote_branch

または、リモートサーバーの変更を構成内の現在のサーバーに変更する


:私のために動作しませんでした、だけで作業コマンドは@umaから1だった git checkout --track -b local_branch_name origin/branch_name
サアドBenbouzid

2

私が最新のgit ドキュメントから理解したことに基づいて、概要は次のとおりです。

git branch -u upstream-branch local-branch
git branch --set-upstream-to=upstream-branch local-branch

この使用法はウルシュレイの答えとは少し異なるようです。彼の概要は次のとおりです。

git branch local-branch -u upstream-branch 
git branch local-branch --set-upstream-to=upstream-branch 

彼らは再びドキュメントを変更したと思いますか?


1

2.7.4のような最新のgitバージョンでは、

git checkout branch_name 追跡ブランチを変更したい#ブランチ名

git branch --set-upstream-to=upstream/tracking_branch_name #upstream-リモート名


1

私が見つけた@critikaster私はGIT 2.21でこれらのコマンドを実行しなければならなかったことを除いて、のポスト役立ちます:

$ git remote set-url origin https://some_url/some_repo
$ git push --set-upstream origin master

0

最も簡単な方法は、単に新しいブランチにプッシュすることです:

git push -u originブランチ/名前

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