Git: не видно новой удаленной ветки
Коллега нажал новую удаленную ветвь на начало /dev/homepage, и я не могу ее увидеть, когда я запустил:
$ git branch -r
Я все еще вижу предыдущие удаленные ветки.
Я предполагаю, что это связано с тем, что мои локальные удаленные ссылки не соответствуют последним, когда я запускал git, ничего не произошло, так как git pull только натягивает текущую рабочую ветку правильно? В отличие от git push, который толкает все ветки, которые имеют изменения в соответствующей удаленной ветке?
Ответы
Ответ 1
Во-первых, дважды проверьте, что ветвь удалена удаленно, используя команду git ls-remote origin
. Если новая ветвь появляется на выходе, попробуйте и дайте команду git fetch
: она должна загрузить ссылки на ветку из удаленного репозитория.
Если ваша удаленная ветка все еще не отображается, дважды проверьте (в выводе ls-remote
), что такое имя ветки на пульте дистанционного управления и, в частности, если она начинается с refs/heads/
. Это связано с тем, что по умолчанию значение remote.<name>.fetch
равно:
+refs/heads/*:refs/remotes/origin/*
так что только удаленные ссылки, чье имя начинается с refs/heads/
, будут отображаться локально как ссылки удаленного отслеживания в разделе refs/remotes/origin/
(т.е. они станут ветвями удаленного отслеживания)
Ответ 2
Выполнение удаленного обновления git также обновит список веток, доступных из удаленного репозитория.
Если вы используете TortoiseGit, начиная с версии 1.8.3.0, вы можете сделать "Git → Sync", и в левом нижнем углу появившегося окна появится кнопка "Удаленное обновление". Нажмите на нее. Затем вы сможете выполнить "Git → Switch/Checkout", и в раскрывающемся списке ветвей вы можете выбрать новую удаленную ветку.
Ответ 3
Проверьте, содержит ли .git/config
[remote "origin"]
url = …
fetch = +refs/heads/master:refs/remotes/origin/master
Если это так, измените его, чтобы сказать
[remote "origin"]
url = …
fetch = +refs/heads/*:refs/remotes/origin/*
Затем вы сможете использовать его:
$ git fetch
remote: Counting objects: …
remote: Compressing objects: ..
Unpacking objects: …
remote: …
From …
* [new branch] branchname -> origin/branchname
$ git checkout branchname
Branch branchname set up to track remote branch branchname from origin.
Switched to a new branch 'branchname'
Ответ 4
Наконец-то мне удалось добавить имя удаленного репозитория в команду git fetch
, например:
git fetch core
Теперь вы можете увидеть их все так:
git branch --all
Ответ 5
Это звучит тривиально, но моя проблема заключалась в том, что я не был в правильном проекте. Убедитесь, что вы находитесь в проекте, в котором вы ожидаете; в противном случае вы не сможете вывести правильные ветки.