Как изменить удаленный филиал отслеживается?

Репозиторий central должен был быть настроен на новом сервере, поэтому я создал новый пульт в своем локальном репо и нажал на него.

Но теперь, когда я делаю git pull, он утверждает, что я в курсе. Это неправильно: это говорит мне о старой удаленной ветки, а не о новой, которая, как я знаю, имеет новые фиксации для извлечения.

Как изменить локальную ветвь для отслеживания другого пульта?

Я могу видеть это в файле конфигурации git, но я не хочу ничего испортить.

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

Ответ 1

Использование 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

Для меня исправление было:

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

Тогда:

git push

Ответ 3

С обновленной версией git (2.5.5) команда следующая:

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

Это приведет к обновлению удаленной отслеживаемой ветки для текущей локальной ветки

Ответ 4

Если вы здравомыслящны в этом, достаточно отредактируйте файл конфигурации. Если вы хотите быть немного параноиком, вы можете использовать команду фарфора, чтобы изменить его:

git config branch.master.remote newserver

Конечно, если вы посмотрите на конфигурацию до и после, вы увидите, что она сделала именно то, что вы собираетесь делать.

Но в вашем индивидуальном случае я бы сделал следующее:

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

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

Ответ 5

Еще одна возможность иметь большой контроль над тем, что происходит, чтобы вручную редактировать свои конфигурации:

git config --edit

или сокращенное

git config -e

Затем отредактируйте файл по своему желанию, сохраните и ваши изменения будут применены.

Ответ 6

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

или

git fetch
git checkout -b local_branch_name origin/branch_name

Ответ 7

Вы можете либо удалить свою текущую ветку, либо сделать:

git branch --track local_branch remote_branch

Или измените удаленный сервер изменений на текущий в конфигурации

Ответ 8

Это самая простая команда:

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

Например, с учетом команды git remote -v нечто вроде:

origin  ssh://[email protected]/~myself/projectr.git (fetch)
origin  ssh://[email protected]/~myself/projectr.git (push)
team    ssh://[email protected]/vbs/projectr.git (fetch)
team    ssh://[email protected]/vbs/projectr.git (push)

Вместо этого изменить отслеживание команды:

git push --set-upstream team master

Ответ 9

Основываясь на том, что я понимаю из последней git документации, синопсис:

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

Это использование немного отличается от ответа urschrei, так как в его резюме:

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

Я предполагаю, что они снова изменили документацию?

Ответ 10

В последней версии git, такой как 2.7.4,

git checkout branch_name #branch имя, которое вы хотите изменить ветвь отслеживания

git branch --set-upstream-to=upstream/tracking_branch_name #upstream - удаленное имя

Ответ 11

Я нашел сообщение @critikaster полезным, за исключением того, что мне приходилось выполнять эти команды с GIT 2.21:

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