Rinominare un branch Git: locale, remoto e predefinito su GitHub | We.Inc
Genera i comandi esatti per rinominare un branch Git in locale, pubblicare il nuovo nome, eliminare il vecchio branch remoto e sistemare il tracking dell'upstream, più come rinominare main su GitHub.
Per rinominare il branch su cui ti trovi, esegui git branch -m new-name. Per un altro branch, esegui git branch -m old-name new-name. Git non può rinominare un branch su un remoto, quindi pubblica il nuovo nome con git push -u origin new-name, poi elimina quello vecchio con git push origin --delete old-name.
Comandi per rinominare in base alla situazione
Situazione
Comando
Rinominare il branch corrente
git branch -m new-name
Rinominare un altro branch
git branch -m old-name new-name
Sovrascrivere un nome esistente
git branch -M old-name new-name
Pubblicare il nuovo nome e tracciarlo
git push -u origin new-name
Rimuovere il vecchio nome dal remoto
git push origin --delete old-name
Sistemare un clone dopo che qualcun altro l'ha rinominato
git branch -u origin/new-name new-name
Rinominare in locale richiede un solo comando; è sul remoto che ci si blocca, perché un branch remoto non si può rinominare sul posto, solo sostituire. Inserisci qui sotto il vecchio e il nuovo nome per ottenere i comandi per il tuo caso, compreso ciò che i colleghi devono eseguire dopo e i passaggi in più quando il branch è quello predefinito su GitHub.
Inserisci il vecchio nome, il nuovo nome e il remoto, di solito origin.
Indica se ti trovi su quel branch e se esiste già sul remoto.
Esegui i comandi in ordine; il generatore aggiunge il push, l'eliminazione e la correzione dell'upstream solo quando servono.
Invia il blocco per i colleghi a chiunque altro abbia un clone.
Pubblica il nuovo nome prima di eliminare quello vecchio, così una pull request aperta o una run di CI non vedono mai sparire del tutto il branch.
Su GitHub, per i branch condivisi è meglio rinominare dalla pagina dei branch: reindirizza le pull request aperte e i vecchi URL al posto tuo.
Cerca il vecchio nome nei workflow di CI, nelle impostazioni di deploy e negli script. GitHub fa notare che i workflow di Actions che lo citano non vengono aggiornati.
git branch -m rinomina anche il reflog del branch, quindi la sua cronologia locale degli spostamenti segue il nuovo nome.
Domande frequenti
Posso rinominare direttamente un branch remoto?
Non con il semplice git. Pubblichi il branch con il nuovo nome ed elimini il vecchio. L'interfaccia web di GitHub può rinominare un branch sul server, mantenendo funzionanti anche pull request e link.
Qual è la differenza tra -m e -M?
-m si rifiuta se esiste già un branch con il nuovo nome. -M è l'abbreviazione di --move --force e lo sostituisce. Nessuno dei due rinomina un branch su cui è fatto il checkout in un altro worktree dello stesso repository.
Come rinomino master in main su GitHub?
Nel repository su GitHub apri Branches, scegli rinomina su master e digita main. Rinominare il branch predefinito richiede l'accesso da amministratore. Poi tutti eseguono i quattro comandi che mostra GitHub: rinominare in locale, fare fetch, impostare l'upstream e aggiornare l'HEAD di origin.
Perché git push va ancora al vecchio nome del branch?
Il branch rinominato traccia ancora il vecchio upstream. Fai una volta il push con -u, oppure esegui git branch -u origin/new-name, e i push e pull successivi useranno il nuovo nome.
Cosa aggiorna GitHub quando rinomini da lì
GitHub reindirizza gli URL web che contengono il vecchio nome, sposta la protezione del branch sul nuovo nome e reindirizza le pull request aperte e le bozze di release basate su di esso. Gli URL dei file raw non vengono reindirizzati.
Chi ha permessi di scrittura può rinominare i branch ordinari; rinominare il branch predefinito o un branch protetto richiede diritti di amministratore, e i ruleset dell'organizzazione possono restringere ulteriormente questa possibilità.
Evitare nomi che creano problemi in seguito
Limita i nomi a lettere minuscole, cifre, trattini e barre per raggruppare, come fix/login-timeout. Git rifiuta nomi con spazi, due punti consecutivi, un punto o una barra finale, un trattino iniziale o uno qualsiasi dei caratteri ~ ^ : ? * [ e la barra rovesciata.
Rinomina completa, dall'inizio alla fine
Rinominare ovunque un branch già pubblicato
Rinomina in locale, pubblica il nuovo nome con il tracking, poi rimuove il vecchio branch remoto.
Cosa eseguono i colleghi dopo una rinomina su GitHub
Sono i passaggi indicati da GitHub per aggiornare un clone esistente, con la pulizia facoltativa dei branch remoti obsoleti.
Generatore di comandi per rinominare
Nome attuale del branch
Nuovo nome del branch
Remoto
Sono su questo branch in questo momento
Il branch esiste sul remoto
I tuoi comandi
I colleghi eseguono
Niente da comunicare ai colleghi: il branch non è mai stato pubblicato.
Questo non è un nome di branch valido. Consulta le regole sui nomi più in basso nella pagina.