Почему у моей 'git branch' нет хозяина? - PullRequest
80 голосов
/ 02 сентября 2010

Я новичок в Git и продолжаю читать о ветке "master".Является ли «master» просто обычным именем, которое используют люди, или оно имеет особое значение, например HEAD?

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

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

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

Ответы [ 8 ]

79 голосов
/ 24 января 2014

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

git checkout -t -b master origin/master
65 голосов
/ 02 сентября 2010

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

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

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

пульта дистанционного управления.
38 голосов
/ 02 сентября 2010

master - это просто название ветки, в этом нет ничего волшебного, кроме того, что оно создается по умолчанию при создании нового хранилища.

Вы можете добавить его обратно с помощью git checkout -b master.

21 голосов
/ 22 августа 2012

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

13 голосов
/ 04 июня 2014

В моем случае была ветвь development , но нет ветки master .Поэтому я клонировал репозиторий, указывая вновь созданную HEAD на существующую ветку.Затем я создал недостающую ветку master и обновил HEAD, чтобы она указала на новую ветку master.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master
12 голосов
/ 21 марта 2013

если это новый репо, который вы клонировали, он все равно может быть пустым, в этом случае:

git push -u origin master

, скорее всего, должно разобраться.

(сделал в моем случае. Не уверен, что это та же самая проблема, думал, что я должен опубликовать это просто в случае. Может помочь другим.)

7 голосов
/ 25 ноября 2015

Я столкнулся с той же проблемой и выяснил проблему.Когда вы инициализируете репозиторий, на самом деле нет никаких веток.При запуске проекта запустите git add ., а затем git commit, и будет создана основная ветвь.

Без проверки чего-либо у вас нет главной ветки.В этом случае вам необходимо выполнить действия, предложенные другими людьми.

0 голосов
/ 25 января 2017

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

git push -u origin master

Итак, если вы сделали git init ., а затем git remote add origin ..., вам все равно нужно сделать:

git add ...
git commit -m "..."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...