Por que meu 'branch git' não tem master?

94

Sou um novato git e continuo lendo sobre um branch "master". "Mestre" é apenas um nome convencional usado pelas pessoas ou tem um significado especial como HEAD?

Quando faço git branchno clone que tenho, vejo apenas um único branch - aquele em que estou. Nenhum "mestre" em tudo. Se eu digitar git checkout master(como vejo em muitos tutoriais ou guias), recebo

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

Estou apenas confuso sobre por que meu clone não tem um masterque todos parecem sugerir que ele sempre existe.

aberrante 80
fonte

Respostas:

73

A maioria dos repositórios Git usa mastercomo branch principal (e padrão) - se você inicializar um novo repositório Git via git init, ele terá feito mastercheck-out por padrão.

No entanto, se você clonar um repositório, o branch padrão que você tem é o que o remoto HEADaponta ( HEADna verdade é uma referência simbólica que aponta para o nome do branch). Portanto, se o repositório que você clonou tiver um HEADapontado, digamos foo, então seu clone terá apenas um foobranch.

O controle remoto do qual você clonou ainda pode ter um masterbranch (você pode verificar com git ls-remote origin master), mas você não teria criado uma versão local desse branch por padrão, porque git cloneapenas verifica o remoto HEAD.

Âmbar
fonte
6
E então como fazer o checkout master da origem, se existir?
Bunyk
como fazer para definir HEAD para master
Matt Smith
32
Criei meu repo com git init e o branch master não foi criado. Com o Github, o branch é criado automaticamente, mas não com o Bitbucket. Os passos Mising foram: git add ., git commit -m "Test"e, em seguida git push -u origin master.
Shailen,
12
@Amber Estou recebendo este erro "fatal: master: não é um SHA1 válido"
KK_07k11A0585
1
@Amber git ls-remote origin masternão mostra nada.
Parisa Khateri
86

Para fazer check-out de um branch que não existe localmente, mas está no repo remoto, você pode usar este comando:

git checkout -t -b master origin/master
Bunyk
fonte
Obrigado por tentar ajudar, embora esta questão seja bastante antiga. Mas sua resposta não foi o que eu estava perguntando.
aberrant80
fatal: Cannot update paths and switch to branch 'master' at the same time.
Raphael Onofre
Corrigido no github criando um branch master e configurando como padrão
Raphael Onofre
45

master é apenas o nome de um branch, não há nada de mágico nisso, exceto que é criado por padrão quando um novo repositório é criado.

Você pode adicioná-lo de volta com git checkout -b master.

Matt Curtis
fonte
git checkout -b masterapenas adiciona um novo branch do atual para mim.
nnyby
1
@nnyby git checkout -b mastercriará um masterbranch de qualquer coisa HEAD- então se você estiver em outro branch, ele criará um masterbranch a partir dele. Exceto se você já tiver um masterbranch (o que você terá, a menos que, por exemplo, você o deletou ou nunca fez commit nele). Se você já tem um masterbranch, este comando apenas lhe dará um erro.
Matt Curtis,
2
Minha pergunta é: como eu excluí o mestre acidentalmente?
Eric Walker
@EricWalker masteré apenas um branch, que pode ser excluído com git branch -d master. Embora o git o proteja de deletar o branch em que você está atualmente, não há nada de especial protegendo o masterbranch. Mais especificamente do que isso, é difícil dizer como você fez isso. Talvez você use o historycomando do seu shell para dar uma olhada?
Matt Curtis
1
Olá @MattCurtis, sua resposta atualmente é enganosa. git checkout -b mastersó funcionará quando HEAD estiver definido como origin / master. Em qualquer outro caso (por exemplo, você está em 'desenvolver'), git checkout -b mastercriará um branch chamado 'mestre' que é baseado na posição HEAD atual (por exemplo, de 'desenvolver'). Você também precisa indicar qual branch será o bastão do novo. @Bunyk tem a resposta correta neste tópico: stackoverflow.com/a/21330943/287109
AVIDeveloper
23

Na verdade, tive o mesmo problema com um repositório completamente novo. Eu até tentei criar um com git checkout -b master, mas não criaria o branch. Então percebi que se fizesse algumas alterações e as confirmasse, git criava meu branch master.

eacousineau
fonte
1
A parte enganosa é que as pessoas dizem que eu tenho o master, mas o que quer que eu tente fazer, recebo mensagens de erro dizendo que não tenho o master. (Eu estava tentando criar um branch de desenvolvimento enquanto meu repo ainda estava vazio.) Ao comprometer algo (qualquer arquivo), o master passou a existir e eu fui capaz de fazer outras coisas. Tentei as coisas nas outras respostas, mas nada ajudou. Esta resposta aqui pode se aplicar a muitas pessoas lá fora. (Eu li muito sobre hash no Git. Acho que se não há nada no início, não há nada para fazer hash.)
Fai Ng
15

No meu caso, havia um branch de desenvolvimento , mas nenhum branch master . Portanto, eu clonei o repositório apontando o HEAD recém-criado para o branch existente. Em seguida, criei o branch master ausente e atualizei o HEAD para apontar para o novo branch master.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master
antoniobe
fonte
Ah lá vamos nós .. Eu não tinha mestre nem nada. Primeiro adicionei um novo arquivo e um commit inicial - então fiz isso. Funcionou como um encanto
Dustin Silk
12

se for um novo repo que você clonou, ainda pode estar vazio; nesse caso:

git push -u origin master

provavelmente deve resolver isso.

(fiz no meu caso. não tenho certeza se é o mesmo problema, pensei que deveria postar isso apenas para o caso. pode ajudar outros.)

dígito
fonte
8

Encontrei o mesmo problema e descobri o problema. Quando você inicializa um repositório, não há ramos na verdade. Ao iniciar um projeto, execute git add .e, em seguida, git commito branch master será criado.

Sem verificar nada, você não tem um branch master. Nesse caso, você precisa seguir as etapas que outras pessoas sugeriram.

Nick ONeill
fonte
2
verdade. faça um "git init" seguido por "git checkout -b somebranchname" e você não terá nenhum branch master
koem
Isso também pode não ser suficiente se a pasta estiver vazia. Então, para fazer isso funcionar, você deve adicionar alguns arquivos. Este outro constrangimento é realmente decepcionante.
alehro de
0

Parece que deve haver pelo menos um commit local no branch master para fazer:

git push -u origin master

Então, se você fez git init .e depois git remote add origin ..., ainda precisa fazer:

git add ...
git commit -m "..."
Zelphir Kaltstahl
fonte