Чому моя «гілка git» не має майстра?


94

Я git новачок, і я продовжую читати про "майстер" галузь. "Майстер" - це просто загальноприйняте ім'я, яке люди використовували, чи воно має, наприклад, особливе значення HEAD?

Коли я роблю git branchна своєму клоні, я бачу лише 1 єдину гілку - ту, на якій я перебуваю. Ніякого "господаря" взагалі. Якщо я набираю текст git checkout master(як я бачу в багатьох підручниках чи посібниках), я отримую

error: pathspec 'master' did not match any file(s) known to git.

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

Відповіді:


73

Більшість сховищ Git використовують masterяк основну гілку (і за замовчуванням) - якщо ви ініціалізуєте нове репозиторій Git за допомогою git init, воно буде masterвилучено за замовчуванням.

Однак, якщо ви клонуєте сховище, гілка за замовчуванням у вас є тим, на що HEADвказує пульт ( HEADнасправді є символічним посиланням, яке вказує на ім'я гілки). Отже, якщо у сховищі, яке ви клонували, було HEADвказано, скажімо foo, тоді ваш клон просто матиме fooгілку.

Пульт дистанційного керування, з якого ви клонували, все ще може мати masterгілку (ви можете перевірити це git ls-remote origin master), але ви не створили б локальну версію цієї гілки за замовчуванням, оскільки git cloneперевіряє лише пульт HEAD.


6
І як тоді перевірити майстра від походження, якщо він існує?
Буник

як налаштувати HEAD для засвоєння
Метт Сміт

32
Я створив своє репо за допомогою git init, а головна гілка не була створена. У Github гілка створюється автоматично, але не в Bitbucket. У mising кроки були: git add ., git commit -m "Test", то git push -u origin master.
Shailen

12
@Amber Я отримую цю помилку "fatal: master: not a valid SHA1"
KK_07k11A0585

1
@Amber git ls-remote origin masterнічого не показує.
Париза Хатері

86

Щоб перевірити гілку, яка не існує локально, але знаходиться у віддаленому репо, ви можете скористатися цією командою:

git checkout -t -b master origin/master

Дякуємо за спробу допомогти, хоча це питання досить давнє. Але ваша відповідь була не такою, як я просив.
аберрантний80

fatal: Cannot update paths and switch to branch 'master' at the same time.
Рафаель Онофре,


Виправлено в github створення майстер-гілки та встановлення за замовчуванням
Рафаель Онофре

45

master це просто назва гілки, в ній немає нічого магічного, крім того, що вона створюється за замовчуванням, коли створюється нове сховище.

Ви можете додати його назад за допомогою git checkout -b master.


git checkout -b masterпросто додає нову гілку від поточної для мене.
nnyby

1
@nnyby git checkout -b masterстворить masterгілку з будь-чого, що HEADє - отже, якщо ви перебуваєте в іншій гілці, він створить masterгілку з цього. За винятком випадків, коли у вас вже є masterгілка (яку у вас буде, якщо, наприклад, ви її не видалили або ніколи не фіксували). Якщо у вас вже є masterгілка, ця команда просто видасть вам помилку.
Метт Кертіс,

2
Моє запитання: як я випадково видалив майстер?
Eric Walker

@EricWalker master- це лише гілка, яку можна видалити за допомогою git branch -d master. Незважаючи на те, що git захистить вас від видалення гілки, на якій ви зараз перебуваєте, ніщо особливе не захищає masterгілку. Більш конкретно, важко сказати, як ви це зробили. Можливо, ви використовуєте historyкоманду своєї оболонки, щоб поглянути?
Matt Curtis

1
Привіт @MattCurtis, ваша відповідь наразі вводить в оману. git checkout -b masterпрацюватиме лише тоді, коли для HEAD встановлено значення origin / master. У будь-якому іншому випадку (наприклад, ви перебуваєте на "розробці"), git checkout -b masterви створите гілку з назвою "master", яка базується на поточній позиції HEAD (наприклад, на "розробці"). Потрібно також вказати, яка гілка буде найкращою для нової. @Bunyk має правильну відповідь на цю тему: stackoverflow.com/a/21330943/287109
AVIDeveloper

23

У мене насправді була та сама проблема з абсолютно новим сховищем. Я навіть намагався створити такий git checkout -b master, але це не створить гілки. Потім я зрозумів, що якщо вніс деякі зміни та вчинив їх, git створив мою головну гілку.


1
Оманлива частина полягає в тому, що люди кажуть, що у мене є ведучий, але що б я не намагався зробити, я отримував би повідомлення про помилку, кажучи, що у мене немає головного. (Я намагався створити гілку dev, поки моє репо все ще було порожнім.) Запустивши щось (будь-який файл), майстер зараз з’явився, і я зміг продовжувати робити інші речі. Я спробував речі в інших відповідях, але нічого не допомогло. Ця одна відповідь може стосуватися багатьох людей там. (Я багато читав про хешування в Git. Думаю, якщо на початку немає нічого, нема чого хешувати.)
Fai Ng

15

У моєму випадку була гілка розробки, але немає головної гілки. Тому я клонував сховище, вказуючи новостворену HEAD на існуючу гілку. Потім я створив відсутню головну гілку та оновив HEAD, щоб вказати на нову головну гілку.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master

Ах, ми йдемо .. У мене не було ні господаря, нічого. Спочатку я додав новий файл та початковий коміт - потім зробив це. Працював як оберіг
Дастін Шовк

12

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

git push -u origin master

мабуть, слід розібратися.

(робив у моєму випадку. не впевнений, що це та сама проблема, думав, що я повинен опублікувати це просто на випадок. може допомогти іншим.)


8

Я зіткнувся з тим самим питанням і з’ясував проблему. Коли ви ініціалізуєте сховище, насправді немає жодних гілок. Коли ви починаєте запуск проекту, git add .а потім git commitі головна гілка буде створена.

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


2
правда. зробіть "git init", за яким слідує "git checkout -b somebranchname", і у вас не буде головної гілки
koem

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

0

Здається, у головній гілці повинен бути принаймні один локальний коміт:

git push -u origin master

Отже, якщо ви робили це git init .і потім git remote add origin ..., вам все одно потрібно зробити:

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