Bir dalın izlediği uzaktan kumanda nasıl değiştirilir?


674

centralDepo benim yerel repo yeni bir uzaktan yarattı, böylece yeni bir sunucu üzerinde kurmak ve buna itti gerekiyordu.

Ama şimdi yaptığımda git pull, güncel olduğumu iddia ediyor. Yanlış - bana eski uzak dalı anlatıyor , yeni değil, bir gerçek için getirecek yeni taahhütler olduğunu biliyorum.

Farklı bir uzaktan kumandayı izlemek için yerel şubemi nasıl değiştirebilirim?

Bunu git config dosyasında görebiliyorum ama işleri karıştırmak istemiyorum.

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

1
Başlığınızı değiştirdim - aslında izlediğiniz uzaktan kumandayı değiştirmeye çalışıyorsunuz, ancak yine de aynı şube adını izliyorsunuz.
Cascabel


5
Bunu, mevcut bir Git dalını uzak bir dal izini nasıl yaparsınız? . Bu soru, şubenin zaten uzak bir dalı izlediğini belirtmez. Bunu yapar.

1
Bana yapılandırma dosyasını düzenlemek gibi görünüyor bu konuda gitmek için en kolay ve en güvenli yol
Steven Lu

Yanıtlar:


1080

Git v1.8.0 veya üstünü kullanma :

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

Veya -uanahtarı kullanabilirsiniz :

git branch branch_name -u your_new_remote/branch_name

Git v1.7.12 veya önceki sürümlerini kullanma :

git branch --set-upstream branch_name your_new_remote/branch_name


2
Aradığım şey buydu - verilen şube için uzaktan izleme şubesini değiştirdi. Teşekkürler!
joachim

7
Ah, benim hatam. Yine de config üzerinden yapardım, çünkü yanlışlıkla şube adını değiştirmeyeceğinizden emin olabilirsiniz, ancak hepsi iyi. +1.
Cascabel

Gönderen 1.8.0 sürüm notları : git şube --set-yukarı kökenli / ana "Bunu söylemek için cazip oldu '', ama bu Git yerel şube düzenlemek için söyler 'henüz kontrol şube ile entegre kökenli / ustası', Bu, kullanıcının ne anlama geldiği pek olası değildir. Seçenek kullanımdan kaldırılmıştır; bunun yerine yeni "--set-upstream-to" (kısa ve tatlı "-u" ile) seçeneğini kullanın. "
Jared Beck

Çok temiz ;_; Bu kadar kolay yarattığım küçük karışıklığı düzeltebilirim! Eyvallah =))
Aditya Milletvekili

56
Uzaktan izleme dalı henüz mevcut değilse, ancak mevcut bir uzaktan izleme dalı şu anda izleniyorsa, varolan yeni uzaktan izleme dalıyla değiştirilemez. Öncelikle geçerli uzaktan izleme dalını ayarlamanız gerekir: git branch --unset-upstream- daha sonra bu cevapta (veya bir sonraki adımda git push -u / --set-upstream) verildiği gibi çalışır .
hakre

88

Benim için düzeltme:

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

Sonra:

git push

3
Github bunu böyle söylüyor. help.github.com/articles/changing-a-remote-s-url
fsharp

18
Bu aslında uzaktan kumandanın olduğu yerde değişir, hangi uzaktan kumandayı izlediğinizi değiştirmez (teknik olarak) - hala "başlangıç ​​noktasını" takip ediyorsunuz, sadece başlangıç ​​tanımını günceller. Bazı kullanım durumlarında bu kötü bir şey olabilir. Diyelim ki çatal jQuery ve yeni bir uzaktan kumanda. "Orijin" sizin çatalınız, "upstream" jQuery. Ardından, çatal yerine orijinal depoyu geçici olarak izlemeniz gerektiğini varsayalım. Eğer kullandıysanız set-urlve geri git push
koymayı

42

Güncel bir git (2.5.5) ile komut aşağıdaki gibidir:

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

Bu, geçerli yerel dalınız için uzaktan izlenen dalı güncelleştirir


3
Vuruş git branch --set-upstream-to=origin/develophatası kaldırdı: error: the requested upstream branch 'origin/develop' does not exist. Önceden, delelop için uzak bir dalı yeniden adlandırdım.
belgoros

1
@belgoros git fetch --allbelki?
Gabriel Devillers

25

Olanlar üzerinde çok fazla kontrole sahip olmanın bir başka yolu da konfigürasyonlarınızı elle düzenlemektir:

git config --edit

veya stenografi

git config -e

Sonra dosyayı dilediğiniz gibi düzenleyin, kaydedin ve değişiklikleriniz uygulanır.


1
Bu benim için günü kurtardı. Teşekkürler!
Martyn Chamberlin

Benim sorunum iki köken olmasıydı. (kökeni ve kökeni-algo). Ancak yerel usta "origin-algo" yu izliyordu. Ama onun "kökeni" izlemesini istedim. Bunu değiştirebilmemin tek yolu git config'i düzenlemekti.
Aswin Prasad

19

Bu konuda aklınız varsa, yapılandırma dosyasını düzenlemek yeterince güvenlidir. Biraz daha paranoyak olmak istiyorsanız, porselen komutunu değiştirmek için kullanabilirsiniz:

git config branch.master.remote newserver

Tabii ki, konfigürasyona önce ve sonra bakarsanız, tam olarak ne yapacağınızı göreceksiniz.

Ama sizin bireysel durumunuzda yapacağım şey:

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

Yani, eğer yeni sunucu standart uzaktan kumanda olacaksa, neden başlangıçta klonlanmışmışsınız gibi menşei olarak adlandırmıyorsunuz?


3
Aslında bu sorunu kodlamadan önce yaptım - git akıllıydı ve uzaktan yeniden adlandırmayı yapılandırma dosyasına taşıdı, bu yüzden örneğinizde, yapılandırma dosyam 'eski köken' dedi.
joachim

Şahsen, bu yolun kavramsal olarak kabul edilen yoldan daha anlamlı olduğunu düşünüyorum, ama sanırım işlevsel olarak eşdeğerler, doğru mu?
Evan Donovan

1
@Jefromi: remote renameHem [remote]yapılandırmalarda hem de yapılandırmalarda uzaktan kumandanın adını değiştirdiği için A , istenen şeyi yapmaz [branch]. Bu durumda birinin yapması gereken yapılandırma dosyasını düzenlemek ve söylediklerinizi (uzaktan kumandaların yeniden adlandırılması) sadece [remote]yapılandırma satırlarında yapmaktır .
Sumeet Pareek

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

veya

git fetch
git checkout -b local_branch_name origin/branch_name

Benim durumum için ihtiyacım vardı git fetch. Bitbucket'te yeni bir şube yaratmıştım ve ona geçmek istedim. git uzaktan değişiklikleri bilmiyor, bu yüzden daha git fetchönce yapmam gerekiyordu git checkout feature/new-feature-branch. Umarım bu başka birine yardımcı olur.
TelamonAegisthus

6

Bu en kolay komuttur:

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

Örneğin, komut verildiğinde şöyle bir git remote -vşey üretir:

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)

Bunun yerine ekibi izleme olarak değiştirmek için:

git push --set-upstream team master

Belirsiz bir şey olmadığında izlenecek dal isteğe bağlıdır. Github'dan uzaklaşırken önerinizi kullandım;) Teşekkür ederim.
gouessej

4

Mevcut dalınızı silebilir ve şunları yapabilirsiniz:

git branch --track local_branch remote_branch

Veya uzak sunucuyu yapılandırmadaki geçerli sunucu olarak değiştirin


benim için çalışmadı, sadece çalışma komutu @uma'dan biriydi: git checkout --track -b local_branch_name origin/branch_name
Saad Benbouzid

2

En son git belgelerinden ne anladığımı temel alarak , özet:

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

Bu kullanım, özetinde olduğu gibi, urschrei'nin cevabından biraz farklı gibi görünüyor:

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

Sanýrým belgeleri tekrar deđiţtirdiler mi?


1

2.7.4 gibi son git sürümünde ,

git checkout branch_name #branch izleme dalını değiştirmek istediğiniz ad

git branch --set-upstream-to=upstream/tracking_branch_name #upstream - uzak ad


1

GIT 2.21 ile bu komutları yerine getirmek zorunda kaldım dışında @critikaster'ın gönderisini yararlı buldum :

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

0

en kolay yol sadece yeni şubeye zorlamaktır:

git push -u kökeni şube / adı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.