Як змінити пульт відстеження філії?


673

centralСховище повинне було бути встановлено на новому сервері, тому я створив новий пульт на моєму місцевому репо, і підштовхнув до цього.

Але зараз, коли я це роблю git pull, він стверджує, що я в курсі. Це неправильно - це розповідає мені про стару віддалену гілку, а не про нову, яка, як я знаю, фактично має нові зобов'язання.

Як я можу змінити свою локальну гілку для відстеження іншого дистанційного?

Я бачу це у файлі конфігурації git, але я не хочу псувати речі.

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

1
Я переробив ваш заголовок - ви насправді намагаєтесь змінити віддалений, який ви відстежуєте, але все одно відстежуєте ту саму назву гілки.
Каскабель


5
Важко вважати це дублікатом. Як зробити існуючу гіт-гітку Git віддаленою гілкою? . Це питання не вказує, що філія вже відстежує віддалену гілку. Цей робить.

1
мені здається, що редагування конфігураційного файлу - це найпростіший і найбезпечніший спосіб зробити це
Стівен Лу,

Відповіді:


1079

Використання 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
Це те, що я шукав - змінив гілку віддаленого відстеження для даної гілки. Дякую!
Йоахім

7
Ах, моя погана. Я б все одно це робив через конфігурацію, тому що ви можете бути впевнені, щоб випадково не змінити назву гілки, але все добре. +1.
Каскабель

З примітки до випуску 1.8.0 : "Привабливо було сказати" git branch --set-upstream origin / master ", але це вказує Git організувати локальну гілку" origin / master ", щоб інтегруватися з поточно перевіреною гілкою, що дуже малоймовірно, що мав на увазі користувач. Опція застаріла; замість цього використовуйте нову опцію "--set-upstream-to" (з коротким і солодким "-u"). "
Джаред Бек

Так чисто; _; Я міг би виправити маленький безлад, який я створив так легко! Дякую =))
депутат Адітя

56
Якщо гілка віддаленого відстеження ще не існує, але наявна гілка віддаленого відстеження наразі відслідковується, її не можна змінити на існуючу нову гілку віддаленого відстеження. Вам потрібно спочатку зняти поточну гілку відстеження: git branch --unset-upstream- потім вона працює, як зазначено у цій відповіді (або з наступною git push -u / --set-upstream).
хакре

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. Раніше я перейменував віддалену гілку на делелоп.
belgoros

1
@belgoros git fetch --allможливо?
Габріель

25

Інший варіант, щоб мати великий контроль над тим, що відбувається, - це редагувати свої конфігурації вручну:

git config --edit

або стенограму

git config -e

Потім відредагуйте файл за бажанням, збережіть і ваші модифікації будуть застосовані.


1
Це врятувало мені день. Дякую!
Мартін Чемберлін

Моє питання полягало в тому, що існувало два джерела. (походження та походження-альго). Але місцевий майстер відстежував "походження-альго". Але я хотів, щоб воно відстежувало "походження". Єдиний спосіб я міг змінити це шляхом редагування git config.
Асвін Прасад

19

Якщо ви не зважаєте на це, редагування конфігураційного файлу досить безпечне. Якщо ви хочете бути трохи більш параноїком, ви можете скористатися командою фарфор, щоб змінити його:

git config branch.master.remote newserver

Звичайно, якщо ви подивитеся на конфігурацію до і після, ви побачите, що він робив саме те, що ви збиралися робити.

Але у вашому індивідуальному випадку я б це:

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

Тобто, якщо новий сервер буде канонічним віддаленим, чому б не назвати його походження так, як ніби ви спочатку клонували з нього?


3
Я насправді зробив це, перш ніж вирішити цю проблему - git був розумним і переніс віддалене перейменування до конфігураційного файлу, тому у вашому прикладі мій файл конфігурації сказав "старе походження".
Йоахім

Особисто я вважаю, що цей спосіб має сенс концептуальніший, ніж прийнятий, але я думаю, що вони функціонально рівнозначні, правда?
Еван Донован

1
@Jefromi: A remote renameне буде робити те, що просять, оскільки він змінює ім'я дистанційного керування як у [remote]налаштуваннях, так і в [branch]налаштуваннях. Отже, що потрібно зробити в цьому випадку - це відредагувати конфігураційний файл і зробити те, що ви говорите (перейменування віддалених) просто у [remote]конфігураційних рядках.
Sumeet Pareek

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: git checkout --track -b local_branch_name origin/branch_name
Саад Бенбузід

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

В останній версії git на зразок 2.7.4 ,

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 походження гілка / назва

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.