Git: не удается увидеть новую удаленную ветку


коллега нажал новую удаленную ветку на origin / dev / homepage, и я не вижу ее при запуске:

$ git branch -r

Я все еще вижу уже существующие удаленные ветви.

Я предполагаю, что это связано с тем, что мои локальные удаленные ссылки не обновлены, поэтому, когда я запустил git pull, ничего не произошло, так как git pull только тянет текущую рабочую ветвь правильно? В отличие от git push, который толкает все ветви, которые имеют изменения в соответствующей удаленной ветви?

6 61

6 ответов:

во-первых, дважды проверьте, что ветка была фактически нажата удаленно, с помощью команды git ls-remote origin. Если новая ветвь появляется в выходных данных, попробуйте и дайте команду git fetch: он должен загрузить ссылки на ветви из удаленного репозитория.

если ваша удаленная ветка по-прежнему не отображается, дважды проверьте (в ls-remote вывод) каково имя ветви на пульте дистанционного управления и, в частности, если оно начинается с refs/heads/. Это происходит потому, что по умолчанию значение remote.<name>.fetch это:

+refs/heads/*:refs/remotes/origin/*

так что только удаленные ссылки, чье имя начинается с refs/heads/ будет отображаться локально как ссылки удаленного отслеживания под refs/remotes/origin/ (т. е. они станут филиалами удаленного отслеживания)

делать git remote update также будет обновлен список ветвей, доступных из удаленного репозитория.

Если вы используете TortoiseGit, начиная с версии 1.8.3.0, вы можете сделать "git -> Sync", и в левом нижнем углу окна появится кнопка "удаленное обновление". Нажмите на это. Затем вы должны быть в состоянии сделать "Git -> Switch/Checkout" и иметь новую удаленную ветку, появляющуюся в выпадающем списке ветвей, которые вы можете выбрать.

проверить, является ли .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'

У меня такая же проблема иногда.

самый простой ответ:

git fetch origin <branch_name>

что в конечном итоге работает для меня, так это добавить имя удаленного репозитория в , например:

git fetch core

Теперь вы можете видеть их все так:

git branch --all

Это звучит банально, но моя проблема была в том, что я не в правильном проекте. Убедитесь, что вы находитесь в проекте, в котором вы ожидаете быть; в противном случае, вы не сможете снять правильные ветви.