Cambia i nomi dei rami in git


103

Potrebbe esserci più di un modo per porre questa domanda, quindi ecco una descrizione del problema. Stavo lavorando al master e ho impegnato alcune cose e poi ho deciso che volevo sospendere quel lavoro. Ho eseguito il backup di alcuni commit e poi ho ramificato da prima di iniziare il mio lavoro di merda. Praticamente funziona bene, solo ora ho un ramo diverso come ramo di sviluppo principale. Mi chiedo come potrei cambiare le cose, quindi sto lavorando di nuovo su master ma non ha il mio lavoro spazzatura e ha detto che il lavoro è su un ramo diverso.

Alcuni modi in cui questo potrebbe essere chiesto / risolto: come faccio a rinominare il mio ramo master in qualcos'altro e quindi rinominare qualcos'altro in master? Come eseguo il backup di master e quindi faccio in modo che tutti i commit di cui ho eseguito il backup siano su un ramo diverso?

Grazie per tutte le (rapide) risposte! Sono tutti buoni.

Risposte:


144

Oltre agli altri commenti, potresti trovare utile l'opzione -m (sposta) su git-branch. Puoi rinominare il tuo vecchio master in qualcos'altro, quindi rinominare il tuo nuovo ramo in master:

git branch -m master crap_work
git branch -m previous_master master

A seconda del flusso di lavoro, potresti anche voler modificare i riferimenti di ramo in .git / config. Sono passato [branch "crap_work"]a leggere in [branch "master"]modo che il master si sincronizzasse ancora con origin/master. Naturalmente, lo stato dei due pronti contro termine era tale che ciò avesse ancora senso.
Eponimo

3
Questo non rinomina i rami sul repository remoto, solo sul repository locale.
smohadjer

1
@smohadjer Per rinominare i telecomandi, dovresti fare git push -uf origin mastere git push -u origin crap_work.
zyy

31

Penso che dovresti prendere in considerazione una diversa strategia di sviluppo per prevenire problemi come questo. Uno che sembra funzionare meglio per me è non fare mai sviluppo direttamente sul mio ramo principale. Indipendentemente dalle modifiche che sto apportando, creo sempre un nuovo ramo per il nuovo codice:

git checkout -b topic / topic_name master

Da lì, posso inviare le modifiche ai repository pubblici:

git push pu topic / topic_name

o alla fine uniscilo di nuovo con il mio ramo principale:

git checkout master && git merge topic / topic_name

Se hai davvero bisogno di tornare indietro nel tempo e impostarlo come master, puoi rinominare il ramo corrente in qualcos'altro e quindi controllare una versione precedente per essere il tuo master:

 git branch -m master junk
 git co -b master old_sha1_value

Questa è una buona politica. E ora che ci penso, l'ho visto praticato altrove. Grazie.
Rimian

14

Inizia master, crea un ramo chiamato in-progress, quindi ripristina masterun commit precedente.

$ git branch in-progress
$ git reset --hard HEAD^

1
Non vedo motivo per cui questo sia stato respinto. L'ho fatto da solo alcune volte, prima di conoscere il ramo -m e rendermi conto che master non era immutabilmente legato come nome permanente di un ramo.
Skiphoppy

7

Questo è relativamente facile:

git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch

1
Sì, l'ultimo è completamente opzionale: git checkout -bcrea un ramo e lo rende attivo.
BorisOkunskiy

0

Questo imposterà il tuo master in qualsiasi punto in un unico passaggio:

git checkout -B master new_point
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.