плода в git отримує не всі гілки


201

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

Правильна дія, здається, є

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

На даний момент виникає проблема, чомусь git fetchя не бачу віддаленої гілки dev-gml. Чому ні? Якщо я знову клоную сховище, воно є, тому, безумовно, існує віддалене відділення:

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

Я намагався git update, git pull, git fetch --all, git pretty-pleaseу всіх можливих перестановки ...


44
Що git config --get remote.origin.fetchвиробляє? Якщо це не так +refs/heads/*:refs/remotes/origin/*, мабуть, так і має бути.
torek

так це саме те, що виробляє
Едвард Ньюелл

3
Точно така ж проблема, але коментар вище вирішив її! Я мав +refs/heads/master:refs/remotes/origin/masterз masterзамість*
Мірко

1
Для мене така ж проблема, але жодна з пропозицій на цій сторінці не вирішує її. Дивно.
Магнус

1
@ thoni56: Так, це, ймовірно, пов'язано з дрібним клоном.
Trần Việt Hoàng

Відповіді:


383

Проблему можна побачити під час перевірки remote.origin.fetchналаштування
(Рядки, що починаються з - $це bash-підказки командами, які я набрав. Інші рядки - результат, що виходить)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

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

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

Звичайна карта *означає все, що знаходиться під цим шляхом.

На жаль, я побачив цей коментар після того, як я вже перекопався і знайшов відповідь шляхом спроб та помилок.


2
Це, мабуть, має бути прийнятою відповіддю, оскільки це фактично вирішило питання в оригінальній публікації.
LocalPCGuy

1
лише бічна примітка, мені довелося додати --replace-allпараметр для заміни всіх значень у конфігурації для могоremote.origin.fetch
Garis M Suero

4
Зауважте, що це може статися, якщо ви клонували ваш сховище лише однією гілкою, наприкладgit clone <url> --branch <branch> --single-branch [<folder>]
Narretz

2
Перевірити відповідь stux
Newbee

5
Це може статися, коли ви git clone ... --depth 1
Анатолій

107

У мене це питання було сьогодні на репо.

Це не було +refs/heads/*:refs/remotes/origin/*питанням, як за рішенням.

Ознакою було просто те, що git fetch originабо git fetchпросто не здавалося, що щось роблять, хоча існували віддалені гілки.

Спробувавши багато речей, я видалив джерело віддалення та відтворив його. Це, здається, це виправило. Не знаю чому.

видалити за допомогою: git remote rm origin

і відтворити за допомогою: git remote add origin <git uri>


14
У мене був правильний git config для, remote.origin.fetchтобто +refs/heads/*:refs/remotes/origin/*. Наведене вище рішення допомогло мені.
Newbee

9
Це рішення було і для мене правильним. Це прикро, оскільки вказує на можливу помилку в Git.
Роберт Ошлер

2
Це також вирішило моє питання. У мене також з'являється ця проблема на машині з git версією 2.19.1v, але я не відчував її на іншій машині з git версією 2.17.1
jerpint

6
git remote update originпрацював на мене. Я думаю, щось потребувало освіжаючого?
Феліпе Джерард

2
git remote update originне працював для мене, але видалення та додавання віддаленого зробив.
Анатолій Кметюк

58

Віддалене оновлення

Вам потрібно бігти

git remote update

або

git remote update <remote> 

Потім ви можете запустити git branch -rсписок списків віддалених гілок.

Оформити нове відділення

Для відстеження (нової) віддаленої гілки як локальної гілки:

git checkout -b <local branch> <remote>/<remote branch>

або (іноді це не працює без зайвих remotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

Корисні чіт-листи для git


5
Але моя проблема полягає в тому, що я не можу перевірити існуючий віддалену гілку, оскільки мій клієнт git не вважає, що вона існує. Дивіться моє запитання. Зауважте, що коли я бігаю git fetchза ним, git branch -aвін не показує всіх гілок. Мені довелося видалити свій робочий каталог і повторно клонувати, щоб побачити гілку, dev-gmlяку створив співпрацівник. Цього разу це спрацювало, але ми будемо часто розгалужуватися!
Едвард Ньюелл

Привіт @EdwardNewell, дякує за відповідь, просто щоб повідомити, ваше посилання cheat.errtheblog.com/s/git для мене мертве ...
Kjellski

Минуло давно, коли я вперше поставив це запитання, і я просто подзвонив, бо хтось знову опублікував. Я приймаю цю відповідь, хоча спочатку нічого насправді не працювало на мене. Причиною, що я остаточно позначив це правильним, є те, що я підозрюю, що те, що він написав поруч, Edit:може, спрацювало. Це те, що я б спробував, якби я все ще стикався з проблемою. HTH
Едвард Ньюелл

Для запису, біт, який мені тут допоміг git remote update origin . Це зробило відсутність гілки через git branch -l -r. (Я подивився, git config --get remote.origin.fetchі вихід був +refs/heads/*:refs/remotes/origin/*таким, як очікувалося.)
Роберт Дод'є


4

Щоб зробити його більш конкретним Створіть гілку відстеження, а значить, ви відстежуєте віддалену гілку.

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

Після чого можна

git branch   # to see the remote tracking branch "exp" created .

Потім працювати над цією галуззю

git checkout branchname
git checkout exp

Після внесення змін у відділення. Ви можете отримати git і отримати злиття з вашою віддаленою гілкою відстеження, щоб об'єднати зміни та натиснути на віддалену гілку, як показано нижче.

git fetch origin
git merge origin/experimental  
git push origin/experimental

Сподіваюся, це допомагає і дає вам уявлення, як це працює.


1

У мене була подібна проблема, проте в моєму випадку я могла потягнути / просунути до віддаленої гілки, але git status не показав стан місцевої гілки wrt віддалених.

Також у моєму випадку git config --get remote.origin.fetch нічого не повернулося

Проблема полягає в тому, що у .git/configфайлі вилучення відповідного віддаленого блоку була помилка друку . Можливо, щось я додав помилково раніше (іноді я безпосередньо дивлюся на цей файл або навіть редагую його)

Отже, перевірте, чи правильний ваш віддалений запис у .git/configфайлі, наприклад:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

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


0

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

Повідомлення відділення noExternal3як і раніше показує, що не має віддаленого сховища. Не впевнений, що комбо команд bash знайшло б це чи відкоригувало.


0

Була сьогодні така ж проблема, як налаштувати мою репо з нуля. Я спробував усе, нічого не вийшло, крім видалення джерела та повторного додавання його знову.

git remote rm origin
git remote add origin git@github.com:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched

-1

У нас була така ж проблема, і вам доведеться користуватися

git fetch

git push origin branch_name

git branch -r

Сподіваємось, це допоможе комусь, що стикається з тією ж проблемою

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