Perché il mio "ramo git" non ha un master?


94

Sono un principiante di Git e continuo a leggere di un ramo "master". "Maestro" è solo un nome convenzionale usato dalle persone o ha un significato speciale come HEAD?

Quando lo faccio git branchsul clone che ho, vedo solo 1 singolo ramo - quello su cui sto. Nessun "maestro" a tutti. Se digito git checkout master(come vedo in molti tutorial o guide), ottengo

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

Sono solo confuso sul motivo per cui il mio clone non ha un masterche tutti sembrano implicare che esista sempre.

Risposte:


73

La maggior parte dei repository Git utilizza mastercome ramo principale (e predefinito): se si inizializza un nuovo repository Git tramite git init, verrà masterestratto per impostazione predefinita.

Tuttavia, se cloni un repository, il ramo predefinito che hai è quello a cui HEADpunta il telecomando (in HEADrealtà è un riferimento simbolico che punta a un nome di ramo). Quindi, se il repository che hai clonato aveva un HEADpuntato, diciamo, il footuo clone avrà solo un fooramo.

Il telecomando da cui hai clonato potrebbe ancora avere un masterramo (potresti controllare con git ls-remote origin master), ma non avresti creato una versione locale di quel ramo per impostazione predefinita, perché git clonecontrolla solo il remoto HEAD.


6
E poi come controllare il master dall'origine se esiste?
Bunyk

come si imposta HEAD su master
Matt Smith

32
Ho creato il mio repository con git init e il ramo master non è stato creato. Con Github, il ramo viene creato automaticamente, ma non con Bitbucket. I passi erano Mising: git add ., git commit -m "Test", quindi git push -u origin master.
Shailen

12
@Amber Ricevo questo errore "fatal: master: not a valid SHA1"
KK_07k11A0585

1
@Amber git ls-remote origin masternon mostra nulla.
Parisa Khateri

86

Per estrarre un ramo che non esiste localmente ma si trova nel repository remoto è possibile utilizzare questo comando:

git checkout -t -b master origin/master

Grazie per aver cercato di aiutare, anche se questa domanda è piuttosto vecchia. Ma la tua risposta non era quella che stavo chiedendo però.
aberrant80

fatal: Cannot update paths and switch to branch 'master' at the same time.
Raphael Onofre


Risolto il problema con github che creava un ramo master e l'impostazione predefinita
Raphael Onofre

45

master è solo il nome di un ramo, non c'è niente di magico in esso tranne che viene creato di default quando viene creato un nuovo repository.

Puoi aggiungerlo di nuovo con git checkout -b master.


git checkout -b masteraggiunge solo un nuovo ramo da quello attuale per me.
nnyby

1
@nnyby git checkout -b mastercreerà un masterramo da qualunque cosa HEADsia, quindi se ti trovi su un altro ramo, creerà un masterramo da quello. Tranne se hai già un masterramo (cosa che lo farai, a meno che, ad esempio, non lo hai cancellato o non hai mai eseguito il commit su di esso). Se hai già un masterramo, questo comando ti darà solo un errore.
Matt Curtis

2
La mia domanda è: come ho cancellato accidentalmente il master?
Eric Walker

@EricWalker masterè solo un ramo, che può essere eliminato con git branch -d master. Sebbene git ti protegga dall'eliminazione del ramo in cui ti trovi attualmente, non c'è nulla di speciale a proteggere il masterramo. Più specificamente, è difficile dire come l'hai fatto. Forse usi il historycomando della tua shell per dare un'occhiata?
Matt Curtis

1
Ciao @ MattCurtis, la tua risposta è attualmente fuorviante. git checkout -b masterfunzionerà solo quando HEAD è impostato su origin / master. In ogni altro caso (es. Sei su "sviluppo"), git checkout -b mastercreerà un ramo chiamato "master" che si basa sulla posizione attuale di HEAD (es. Da "sviluppo"). Devi anche indicare quale ramo sarà il ramo per quello nuovo. @Bunyk ha la risposta corretta su questo thread: stackoverflow.com/a/21330943/287109
AVIDeveloper

23

In realtà ho avuto lo stesso problema con un repository completamente nuovo. Avevo anche provato a crearne uno con git checkout -b master, ma non avrebbe creato il ramo. Poi ho capito che se avessi apportato alcune modifiche e le avessi eseguito il commit, git avrebbe creato il mio ramo principale.


1
La parte fuorviante è che le persone dicono che ho il master, ma qualunque cosa provo a fare riceverò messaggi di errore che dicono che non ho il master. (Stavo cercando di creare un ramo di sviluppo mentre il mio repository era ancora vuoto.) Effettuando il commit di qualcosa (qualsiasi file), il master ora è nato e sono stato in grado di continuare a fare altre cose. Ho provato le cose nelle altre risposte, ma niente ha aiutato. Questa risposta qui può essere applicata a molte persone là fuori. (Ho letto molto sull'hashing in Git. Immagino che se all'inizio non c'è niente, non c'è niente da fare.)
Fai Ng

15

Nel mio caso c'era un ramo di sviluppo ma nessun ramo principale . Pertanto ho clonato il repository puntando la HEAD appena creata al ramo esistente. Quindi ho creato il ramo master mancante e aggiorno HEAD in modo che punti al nuovo ramo master.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master

Ah, ci siamo .. non avevo padrone o altro. Per prima cosa ho aggiunto un nuovo file e il commit iniziale, quindi l'ho fatto. Ha funzionato a meraviglia
Dustin Silk

12

se è un nuovo repo che hai clonato, potrebbe essere ancora vuoto, nel qual caso:

git push -u origin master

dovrebbe probabilmente risolverlo.

(Nel mio caso. Non sono sicuro che questo sia lo stesso problema, ho pensato di pubblicarlo solo in caso. Potrebbe aiutare gli altri.)


8

Mi sono imbattuto nello stesso problema e ho capito il problema. Quando si inizializza un repository in realtà non ci sono rami. Quando si avvia un progetto, viene eseguito git add .e quindi git commitverrà creato il ramo master.

Senza controllare nulla non hai un ramo principale. In tal caso è necessario seguire i passaggi suggeriti da altre persone qui.


2
vero. fai un "git init" seguito da "git checkout -b somebranchname" e non avrai alcun ramo master
koem

Anche questo potrebbe non essere sufficiente se la cartella è vuota. Quindi, per far funzionare tutto questo, dovresti aggiungere alcuni file. Questo altro imbarazzo è in realtà deludente.
alehro

0

Sembra che ci debba essere almeno un commit locale sul ramo master da fare:

git push -u origin master

Quindi, se lo hai fatto git init .e poi git remote add origin ..., devi ancora fare:

git add ...
git commit -m "..."
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.