Почему у моей «ветки git» нет мастера?

96

Я новичок в git и продолжаю читать об "основной" ветке. «Мастер» - это просто обычное имя, которое люди использовали, или оно имеет особое значение HEAD?

Когда я делаю это git branchна своем клоне, я вижу только одну ветвь - ту, на которой я работаю. Никакого «хозяина». Если я печатаю git checkout master(как я вижу во многих учебных пособиях или руководствах), я получаю

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

Я просто смущен тем, почему у моего клона нет того, masterчто все, кажется, подразумевают, что он всегда существует.

аберрантный80
источник

Ответы:

76

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

Однако, если вы клонируете репозиторий, ветвью по умолчанию будет то, на что HEADуказывает пульт ( HEADна самом деле это символическая ссылка , указывающая на имя ветки). Итак, если репозиторий, который вы клонировали, HEADуказывал, скажем, на foo, то у вашего клона будет просто fooветка.

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

Янтарь
источник
6
И как тогда проверить мастера из источника, если он существует?
Bunyk
как сделать так, чтобы HEAD стал мастером
Мэтт Смит,
32
Я создал свое репо с помощью git init, но главная ветка не была создана. В Github ветка создается автоматически, но не в Bitbucket. В mising шаги были: git add ., git commit -m "Test", то git push -u origin master.
Шайлен
12
@Amber Я получаю сообщение об ошибке «fatal: master: not a valid SHA1»
KK_07k11A0585
1
@ Эмбер git ls-remote origin masterничего не показывает.
Parisa Khateri
86

Чтобы проверить ветку, которая не существует локально, но находится в удаленном репо, вы можете использовать эту команду:

git checkout -t -b master origin/master
Буник
источник
Спасибо за попытку помочь, хотя этот вопрос довольно старый. Но ваш ответ был не тем, о чем я спрашивал.
aberrant80
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 08
1
@nnyby git checkout -b masterсоздаст masterветку из всего, что HEADесть, поэтому, если вы находитесь в другой ветке, он создаст masterветку из нее . За исключением случаев, когда у вас уже есть masterветка (что будет, если, например, вы не удалили ее или никогда не фиксировали в ней). Если у вас уже есть masterветка, эта команда просто выдаст вам ошибку.
Мэтт Кертис,
2
У меня вопрос: как я случайно удалил мастер?
Эрик Уокер,
@EricWalker master- это просто ветка, которую можно удалить с помощью git branch -d master. Хотя git защитит вас от удаления ветки, в которой вы сейчас находитесь, нет ничего особенного, защищающего masterветку. Точнее говоря, сложно сказать, как вы это сделали. Возможно, вы воспользуетесь historyкомандой своей оболочки, чтобы посмотреть?
Мэтт Кертис,
1
Привет, @MattCurtis, ваш ответ в настоящее время вводит в заблуждение. git checkout -b masterбудет работать, только если для HEAD установлено значение origin / master. В любом другом случае (например, вы находитесь на «разработке»), git checkout -b masterбудет создана ветка с именем «master», основанная на текущей позиции HEAD (например, от «develop»). Также необходимо указать, какая ветка будет лапой для новой. @Bunyk имеет правильный ответ в этой теме: stackoverflow.com/a/21330943/287109
AVIDeveloper
24

На самом деле у меня была такая же проблема с совершенно новым репозиторием. Я даже попытался создать его с помощью git checkout -b master, но он не создал ветку. Затем я понял, что если я внес некоторые изменения и зафиксировал их, git создал мою основную ветку.

Eacousineau
источник
1
Заблуждение состоит в том, что люди говорят, что у меня есть мастер, но что бы я ни пытался сделать, я получал сообщения об ошибках, в которых говорилось, что у меня нет мастера. (Я пытался создать ветку dev, пока мое репо было пустым.) После фиксации чего-то (любого файла) теперь появился мастер, и я смог продолжить делать другие вещи. Я пробовал вещи в других ответах, но ничего не помогло. Этот единственный ответ здесь может относиться ко многим людям. (Я много читал о хешировании в Git. Думаю, если в начале ничего нет, нечего хешировать.)
Fai Ng
16

В моем случае была ветка разработки, но не ветка мастера . Поэтому я клонировал репозиторий, указав только что созданный 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 01
0

Кажется, что в главной ветке должен быть хотя бы один локальный коммит:

git push -u origin master

Так что если вы сделали , git init .и тогда git remote add origin ..., вам все еще нужно сделать:

git add ...
git commit -m "..."
Зелфир Кальтшталь
источник
0

Если вы создаете новый репозиторий из веб-интерфейса Github, вы иногда получаете имя «main» вместо «master». Используя команду git statusсо своего терминала, вы увидите, в каком месте вы находитесь. В некоторых случаях вы бы увидели origin/main.

Если вы пытаетесь отправить свое приложение в облачную службу через интерфейс командной строки, используйте «main», а не «master».

пример: git push heroku main

Аджирогене
источник