¿Por qué mi 'rama git' no tiene maestro?

94

Soy un novato en git y sigo leyendo sobre una rama "maestra". ¿Es "maestro" solo un nombre convencional que la gente usa o tiene un significado especial como HEAD?

Cuando lo hago git branchen el clon que tengo, solo veo 1 rama única, en la que estoy. Ningún "maestro" en absoluto. Si escribo git checkout master(como veo en muchos tutoriales o guías), obtengo

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

Solo estoy confundido sobre por qué mi clon no tiene un masterque todos parecen insinuar que siempre existe.

aberrante80
fuente

Respuestas:

73

La mayoría de los repositorios de Git se utilizan mastercomo rama principal (y predeterminada); si inicializa un nuevo repositorio de Git a través de git init, se habrá masterverificado de forma predeterminada.

Sin embargo, si clona un repositorio, la rama predeterminada que tiene es lo que HEADapunte el control remoto (en HEADrealidad es una referencia simbólica que apunta a un nombre de rama). Entonces, si el repositorio que clonó tenía un HEADapuntado, digamos foo, entonces su clon solo tendrá una foorama.

Es posible que el control remoto desde el que clonó aún tenga una masterrama (puede verificar git ls-remote origin master), pero no habría creado una versión local de esa rama de forma predeterminada, porque git clonesolo verifica el control remoto HEAD.

Ámbar
fuente
6
¿Y luego cómo pagar el maestro desde el origen si existe?
Bunyk
cómo configurar HEAD para dominar
Matt Smith
32
Creé mi repositorio con git init y no se creó la rama maestra. Con Github, la rama se crea automáticamente, pero no con Bitbucket. Los pasos Mising fueron: git add ., git commit -m "Test"y, a continuación git push -u origin master.
Shailen
12
@ Ámbar Recibo este error "fatal: maestro: no es un SHA1 válido"
KK_07k11A0585
1
@Amber git ls-remote origin masterno muestra nada.
Parisa Khateri
86

Para verificar una rama que no existe localmente pero que está en el repositorio remoto, puede usar este comando:

git checkout -t -b master origin/master
Bunyk
fuente
Gracias por intentar ayudar, aunque esta pregunta es bastante antigua. Pero tu respuesta no fue la que te estaba preguntando.
aberrant80
fatal: Cannot update paths and switch to branch 'master' at the same time.
Raphael Onofre
Se corrigió en github creando una rama maestra y configurando como predeterminada
Raphael Onofre
45

master es solo el nombre de una rama, no tiene nada de mágico excepto que se crea por defecto cuando se crea un nuevo repositorio.

Puede volver a agregarlo con git checkout -b master.

Matt Curtis
fuente
git checkout -b mastersolo agrega una nueva rama de la actual para mí.
nnyby
1
@nnyby git checkout -b mastercreará una masterrama a partir de lo que HEADsea, así que si estás en otra rama, creará una masterrama a partir de ella. Excepto si ya tiene una masterrama (lo que tendrá, a menos que, por ejemplo, la haya eliminado o nunca se haya comprometido en ella). Si ya tiene una masterrama, este comando solo le dará un error.
Matt Curtis
2
Mi pregunta es: ¿cómo eliminé accidentalmente el maestro?
Eric Walker
@EricWalker masteres solo una rama, que se puede eliminar con git branch -d master. Aunque git lo protegerá de eliminar la rama en la que se encuentra actualmente, no hay nada especial que proteja la masterrama. Más específicamente que eso, es difícil decir cómo lo hizo. ¿Quizás usas el historycomando de tu shell para echar un vistazo?
Matt Curtis
1
Hola @MattCurtis, tu respuesta actualmente es engañosa. git checkout -b mastersolo funcionará cuando HEAD esté configurado como origin / master. En cualquier otro caso (por ejemplo, estás en 'desarrollar'), git checkout -b mastercreará una rama llamada 'maestro' que se basa en la posición HEAD actual (por ejemplo, de 'desarrollar'). También debe indicar qué rama será la estopa para la nueva. @Bunyk tiene la respuesta correcta en este hilo: stackoverflow.com/a/21330943/287109
AVIDeveloper
23

De hecho, tuve el mismo problema con un repositorio completamente nuevo. Incluso había intentado crear uno con git checkout -b master, pero no crearía la rama. Luego me di cuenta de que si hacía algunos cambios y los comprometía, git creaba mi rama maestra.

eacousineau
fuente
1
La parte engañosa es que la gente dice que tengo el maestro, pero sea lo que sea lo que intente hacer, recibiré mensajes de error que dicen que no tengo el maestro. (Estaba tratando de crear una rama de desarrollo mientras mi repositorio aún estaba vacío). Al confirmar algo (cualquier archivo), el maestro surgió y pude continuar haciendo otras cosas. Probé las cosas en las otras respuestas, pero nada ayudó. Esta única respuesta aquí puede aplicarse a muchas personas. (Leí mucho sobre hash en Git. Supongo que si no hay nada al principio, no hay nada que hash.)
Fai Ng
15

En mi caso, había una rama de desarrollo pero no una rama maestra . Por lo tanto, cloné el repositorio apuntando el HEAD recién creado a la rama existente. Luego creé la rama maestra que faltaba y actualicé HEAD para apuntar a la nueva rama maestra.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master
antoniob
fuente
Ah, ahí vamos .. No tenía amo ni nada. Primero agregué un nuevo archivo y la confirmación inicial, luego hice esto. Funcionó como un encanto
Dustin Silk
12

si se trata de un nuevo repositorio que ha clonado, es posible que aún esté vacío, en cuyo caso:

git push -u origin master

probablemente debería solucionarlo.

(Lo hice en mi caso. No estoy seguro de que sea el mismo problema, pensé que debería publicar esto por si acaso. Podría ayudar a otros).

dígito
fuente
8

Me encontré con el mismo problema y descubrí el problema. Cuando inicializa un repositorio, en realidad no hay ramas. Cuando inicie la ejecución de un proyecto git add .y luego se git commitcreará la rama maestra.

Sin registrar nada, no tiene una rama maestra. En ese caso, debe seguir los pasos que otras personas aquí han sugerido.

Nick ONeill
fuente
2
cierto. haga un "git init" seguido de "git checkout -b somebranchname" y no tendrá una rama maestra
koem
Esto también puede no ser suficiente si la carpeta está vacía. Entonces, para que esto funcione, debe agregar algunos archivos. Esta otra incomodidad es realmente decepcionante.
alehro
0

Parece que debe haber al menos una confirmación local en la rama maestra para hacer:

git push -u origin master

Entonces, si lo hizo git init .y luego git remote add origin ..., aún debe hacer:

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