2011-09-28 16 views
30

A causa dell'uso di sottomoduli nei miei progetti, mi trovo spesso su "(nessun ramo)". Come sto anche aggiungendo il codice a quei sottomoduli che sto commettendo lì dentro. Quando poi voglio spingere quei sottomoduli, ho bisogno di stare su un ramo, naturalmente. Da qui la mia domanda:Git: imposta la diramazione all'attuale rif

C'è un modo/collegamento in git (riga di comando) per impostare una filiale locale alla corrente commit/testa senza la deviazione di

git checkout the_branch 
git reset --hard <previous commit-ish> 

Per essere più precisi, il mio vero problema con la suddetta "deviazione" è che sto temporaneamente lasciando l'originale HEAD con il checkout-comando. Ciò può essere evitato con il comando git branch -f (grazie a CharlesB).

risposta

39

Verificare il ramo con -B: questo ripristinerà il ramo su HEAD, che è il riferimento attuale.

git checkout -B <branch> 

Dal docs:

Se -B è dato, viene creato se non esiste; in caso contrario, viene ripristinato. Questo è l'equivalente transazionale di

$ git branch -f <branch> [<start point>] 
$ git checkout <branch> 

vale a dire, il ramo non viene azzerato/creato a meno che "git checkout" è riuscita.

+3

Ora mi rendo conto che il comando "branch -f" è quello che sto cercando, perché il mio vero problema è che non voglio "lasciare" il commit su cui sono attualmente seduto. Grazie. –

+1

Link alla documentazione ufficiale: https://git-scm.com/docs/git-checkout#git-checkout-emgitcheckoutem-b-Bltnewbranchgtltstartpointgt –

16
git checkout -B the_branch HEAD 

Ciò cassa the_branch a commettere testa, anche se the_branch rilevare qualche altra parte prima. È stato aggiunto in uno degli ultimi rilasci di git, quindi potresti non averlo a disposizione. Un percorso alternativo sarebbe git branch -D the_branch && git checkout -b the_branch

+0

Sto usando git versione 1.7.0.4 e il checkout -B non esiste ancora. Ma è bello vedere che sarà in futuro. –

Problemi correlati