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


96

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

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

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

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

Ответы:


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 создал мою основную ветку.


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.