Git: Неможливо побачити нову віддалену гілку


117

Колега підсунув нову віддалену гілку до origin / dev / homepage, і я не бачу її під час запуску:

$ git branch -r

Я все ще бачу попередньо існуючі віддалені гілки.

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



1
вдалося забути git pull, дякую
JelenaČuklina

1
У моєму випадку git fetch <name-of-remote>зробив трюк. Без назви пульта він НЕ спрацював.
Menno Deij - van Rijswijk

Відповіді:


165

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

Якщо ваша віддалена гілка все ще не відображається, двічі перевірте (у ls-remoteвисновку), яке ім'я гілки на пульті, і, зокрема, якщо воно починається з refs/heads/. Це тому, що за замовчуванням значення remote.<name>.fetch:

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

так що лише віддалені посилання, з яких починається ім'я, refs/heads/будуть відображатися локально як посилання віддаленого відстеження refs/remotes/origin/(тобто вони стануть гілками віддаленого відстеження)


4
Мені вдалося побачити нову віддалену гілку після того, як я отримав git fetch origin, але не впевнений, у чому різниця, якщо я щойно зробив git fetch? Я читав про віддалене оновлення git, але не зрозумів, що це зробить. Чи потрібно мені запускати git fetch для будь-яких нових віддалених гілок звідси і далі?
hybrid9

1
@ hybrid9 Якщо ви використовуєте git fetch, git завантажує посилання з віддаленого сховища за замовчуванням, яке було визначено в .git/config: зазвичай воно буде викликано origin, тому обидві команди є еквівалентними, але ваша конкретна конфігурація може чомусь відрізнятися. Ні, вам не потрібно давати git fetchдля кожної гілки, оскільки (за замовчуванням) вона отримує всі гілки.
Марко Леогранде

1
@ hybrid9 git pullеквівалентний git fetch+ git merge(або git rebaseякщо ви змінили налаштування за замовчуванням), тому ви можете продовжувати використовувати, git pullяк зазвичай, і нові віддалені гілки з’являться самі собою.
Марко Леогранде

1
Я спочатку запускав git pull, але я ніколи не бачив тієї нової віддаленої гілки, яка нас справді збентежила. Тільки поки я не запустив git fetch origin. Я ціную час, відповідаючи на мої запитання.
гібрид9

2
@hybrid У мене те саме питання. git ls-remote gerritrepo:projectпоказує нову віддалену гілку, але git branch -aне ... Я повинен зробити ще один клон, і лише тоді з’явиться нова гілка
Vikram

79

Перевірте, чи .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'

12
Це сталося зі мною після початкового дрібного клонування.
ArkTekniK

Ідеально !!! Дуже дякую! Це сталося зі мною під час встановлення користувальницького дому Homebrew із командою brew tap user/repo: локальна копія репо клонувалась brewіз налаштуваннями, які ви згадали, і не вдалося побачити та використовувати інші гілки, які я мав у своєму репо. Знову дякую! :) +1!
rmbianchi

3
Наступна команда може бути використана замість ручного редагування .git / config- файлу. git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"а потім git fetch originотримати всі гілки за походженням .
dotnetCarpenter

це приємне!
мадц

47

Найпростіша відповідь:

git fetch origin <branch_name>


2
Це було буквально ТІЛЬКИ, що працювало на мене.
Теодор Р. Сміт

3
Це не працює для мене. Я отримую цю помилку:fatal: Couldn't find remote ref <branch_name>
Parisa Khateri

3
так, він працював і для мене, після цього git checkout працював нормально !!
whoami

30

Робити віддалене оновлення git буде також оновити список філій , доступних з віддаленого сховища.

Якщо ви використовуєте TortoiseGit, версії 1.8.3.0, ви можете зробити "Git -> Sync", і в нижній лівій частині вікна, що з’явиться, з'явиться кнопка "Віддалене оновлення". Натисніть на це. Тоді ви повинні мати можливість зробити "Git -> Switch / Checkout", і нова віддалена гілка з'явиться у спадному меню гілок, які ви можете вибрати.


18
git remote updateце старий спосіб зробити це, більш нова вподобана команда git fetch.

У моїй версії TortoiseGit (2.8.0.0) кнопка внизу ліворуч має кілька варіантів під стрілкою, і вона пам'ятає, що ви вибрали раніше. Це означає, що кнопка може не говорити "Віддалене оновлення". Якщо ви не використовували його раніше, він скаже "Потягніть". Тому натисніть на стрілку, і ви побачите "Віддалене оновлення" у списку параметрів.
Майкл Хіндс

14

Скажімо, ми шукаємо випуск / 1.0.5

Коли git fetch -allце не працює , і що ви не можете бачити віддалений філія і git branch -rНЕ показувати цю конкретну галузь.

1. Роздрукуйте всі відгуки з віддаленого (гілки, теги, ...):

git ls-remote origin Показує вам віддалене відділення, яке ви шукаєте.

e51c80fc0e03abeb2379327d85ceca3ca7bc3ee5        refs/heads/fix/PROJECT-352
179b545ac9dab49f85cecb5aca0d85cec8fb152d        refs/heads/fix/PROJECT-5
e850a29846ee1ecc9561f7717205c5f2d78a992b        refs/heads/master
ab4539faa42777bf98fb8785cec654f46f858d2a        refs/heads/release/1.0.5
dee135fb65685cec287c99b9d195d92441a60c2d        refs/heads/release/1.0.4
36e385cec9b639560d1d8b093034ed16a402c855        refs/heads/release/1.0
d80c1a52012985cec2f191a660341d8b7dd91deb        refs/tags/v1.0

Нова філія 'release / 1.0.5' з'являється у висновку.

2. Змусити витягнути віддалену гілку:

git fetch origin <name_branch>:<name_branch>

$ git fetch origin release/1.0.5:release/1.0.5

remote: Enumerating objects: 385, done.
remote: Counting objects: 100% (313/313), done.
remote: Compressing objects: 100% (160/160), done.

Receiving objects: 100% (231/231), 21.02 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (98/98), completed with 42 local objects.
From http://git.repo:8080/projects/projectX
 * [new branch]        release/1.0.5 -> release/1.0.5

Тепер у вас є також місцеві відгуки на місцевому рівні, ви оформили (чи що завгодно) цю гілку.

Робота виконана!


1
Ви рятувальник життя :)
Чакри

№2 було те, що я шукав. Дякую!
Матвій

4

Це звучить тривіально, але моє питання полягало в тому, що я не був у потрібному проекті. Переконайтесь, що ви перебуваєте в проекті, в якому ви очікуєте участі; в іншому випадку ви не зможете зрушити правильні гілки.


Ооооо! Хороший!
Марк

2

Я застосував грубу силу і вийняв пульт, а потім додав його

git remote rm <remote>
git remote add <url or ssh>

1

Що, нарешті, працювало для мене, це додати до команди віддалене сховище сховища git fetch, як це:

git fetch core

Тепер ви можете бачити всіх таких:

git branch --all

0

Ви можете отримати віддалене відділення / n git fetch && git checkout remotebranch

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