Come posso rinominare un ramo Git locale?


Risposte:


13740

Se vuoi rinominare un ramo mentre sei puntato su un ramo, fai:

git branch -m <oldname> <newname>

Se vuoi rinominare il ramo corrente, puoi fare:

git branch -m <newname>

Un modo per ricordare questo è -mper "spostare" (o mv), che è come rinominare i file. L'aggiunta di un alias potrebbe anche aiutare. Per fare ciò, eseguire quanto segue:

git config --global alias.rename 'branch -m'

Se sei su Windows o su un altro filesystem senza distinzione tra maiuscole e minuscole e ci sono solo cambiamenti di maiuscole nel nome, devi usare -M, altrimenti git lancerà il ramo già esistente errore:

git branch -M <newname>

87
Quello che volevo davvero sapere era se questo avrebbe necessariamente effetto sul ramo remoto quando / se
spingevi

181
@PandaWood: aggiungerà il nuovo ramo quando si preme, ma non eliminerà il vecchio ramo. Se lo usi git push -f --mirror, rinominerà il ramo sul telecomando, ma dovresti usare questo metodo solo se il telecomando deve essere semplicemente una copia del tuo repository corrente. Vedi anche questa domanda: stackoverflow.com/questions/1526794/git-rename-remote-branch
siride

19
@PandaWood, dipende da come push.defaultè configurato. Per impostazione predefinita ( matching) passerà a un telecomando il cui nome corrisponde. Dovresti fare git push origin <newname>:<oldname>o creerai un nuovo ramo remoto. Tuttavia, se push.defaultimpostato su upstream, è possibile push origin heade le cose andranno al vecchio nome sul telecomando.
Erin Stanfill,

13
@ NightOwl888: -m probabilmente è l'abbreviazione di "move", seguendo la convenzione Unix di usare il mvper rinominare i file. La ragione di ciò è che lo spostamento e la ridenominazione, in un file system inode basato su directory, sono del tutto equivalenti.
siride,

51
Il nome lungo -mdell'opzione è --move, ad esempio, git branch --move masterrinomina il ramo corrente da chiamare "master".
robenkleene,

445
git branch -m old_branch_name new_branch_name

Il comando sopra cambierà il nome del tuo ramo, ma devi stare molto attento usando il ramo rinominato, perché farà comunque riferimento al vecchio ramo a monte associato ad esso, se presente.

Se vuoi inserire alcune modifiche in master dopo che il tuo ramo locale è stato rinominato in new_branch_name (nome di esempio):

git push origin new_branch_name:master (ora le modifiche andranno al ramo principale ma il nome del ramo locale è new_branch_name)

Per maggiori dettagli, vedi " Come rinominare il nome della tua filiale locale in Git ."


326

Per rinominare il tuo ramo attuale:

git branch -m <newname>

159
Dovrai usare -M per rinominare se stai cambiando solo le maiuscole, poiché git ti dirà che il ramo esiste già.
cjspurgeon,

289

Ecco i passaggi per rinominare il ramo:

  1. Passa al ramo che deve essere rinominato
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

MODIFICA (12/01/2017): assicurati di eseguire il comando git statuse di verificare che il ramo appena creato punta al proprio riferimento e non a quello precedente. Se trovi il riferimento al ramo più vecchio, devi disinserire l'upstream usando:

git branch --unset-upstream

1
In quale passo si disinserire l'upstream? Prima del passaggio 4?
ciclico

1
Questa è la risposta migliore qui in quanto descrive l'intero processo per completare correttamente una ridenominazione
Chris Halcrow,

212

Rinominare il ramo sarà utile al termine del ramo. Quindi stanno arrivando nuove cose e vuoi sviluppare nello stesso ramo invece di eliminarlo e crearne uno nuovo.

Dalla mia esperienza, per rinominare una filiale locale e remota in Git dovresti fare i seguenti passi.

Citando da più stati - Rinomina un ramo locale e remoto in git

1. Rinomina la tua filiale locale

Se sei nel ramo che vuoi rinominare:

git branch -m new-name

Se ti trovi in ​​un ramo diverso:

git branch -m old-name new-name

2. Eliminare il ramo remoto di vecchio nome e premere il ramo locale di nuovo nome

git push origin :old-name new-name

3. Reimpostare il ramo upstream per il ramo locale di nuovo nome

git push origin -u new-name

1
Questo ha funzionato meglio per me. Qui i 2 passaggi mi hanno dato i seguenti errori:error: dst ref refs/heads/<old-name> receives from more than one src.; error: failed to push some refs to 'git@uri:foo/bar.git'
Anto

1
Hai il problema quando esegui il comando git push origin :old-name new-namegiusto?
trungk18,

Sì esattamente (scusate intendevo "2 ° passo", non "2 passi" - stanco)
Anto

116

Le risposte finora sono state corrette, ma ecco alcune informazioni aggiuntive:

Si può tranquillamente rinominare un ramo con '-m' (sposta), ma bisogna stare attenti con '-M', perché forza la ridenominazione, anche se esiste già un ramo con lo stesso nome. Ecco l'estratto della pagina man 'git-branch':

Con un'opzione -m o -M, <oldbranch>verrà rinominato in <newbranch>. Se <oldbranch>aveva un reflog corrispondente, viene rinominato in modo che corrisponda <newbranch>e viene creata una voce reflog per ricordare la ridenominazione del ramo. Se <newbranch>esiste, -M deve essere usato per forzare la ridenominazione.


2
Cosa succede al ramo sovrascritto?
Kevin Dice,

Viene sovrascritto dal nuovo nome / ramo. Ad esempio se hai i seguenti rami in git: master b1 <- ramo corrente b2 dopo aver fatto 'git branch -M b2' avrai solo: maestro b2 <- il ramo corrente b1 sparirà e se desideri recuperalo dovresti verificarlo con il suo hash. Puoi vederlo digitando 'git reflog'. Saluti.
Vanchev,

Il -Mflag è anche utile per forzare una ridenominazione se si sta semplicemente correggendo il caso del nome del ramo, ad esempio cambiando myBranchin MyBranch. (Con -m, git torna fatal: A branch named 'MyBranch' already exists.)
Jon Schneider,

92

1. Rinomina

Se è il tuo ramo attuale, fallo e basta

git branch -m new_name

Se è un altro ramo che vuoi rinominare

git branch -m old_name new_name

2. Traccia un nuovo ramo remoto

- Se il tuo ramo è stato trasferito, dopo aver rinominato devi eliminarlo dal repository Git remoto e chiedere al tuo nuovo locale di tracciare un nuovo ramo remoto:

git push origin :old_name
git push --set-upstream origin new_name

74

Ho stupidamente chiamato un ramo che inizia con un trattino e poi ho controllato il maestro. Non volevo cancellare il mio ramo, ci avevo lavorato.

Nessuno di questi ha funzionato:

git checkout -dumb-name

git checkout -- -dumb-name

"s, 's e \s non hanno aiutato neanche. git branch -mnon funziona

Ecco come l'ho finalmente risolto. Vai in .git / refs / heads della tua copia di lavoro, trova il nome file "-dumb-name", ottieni l'hash del ramo. Quindi questo verificherà, creerà un nuovo ramo con un nome sano ed eliminerà quello vecchio.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name

8
Non avresti potuto semplicemente rinominare il file in refs / heads?
android.weasel,

Idem. Se devi scavare nella struttura delle directory per fare questa magia, vai fino in fondo e fai un 'mv - -dumb-name nome-brillante' Fai un 'git branch -av' e vedrai una struttura di directory di .git / rif. O forse 'grep -R ^ .git / refs' per vedere direttamente gli hash.
Dave X,

2
Probabilmente avresti potuto usarereflog
Code Whisperer il

Onestamente, se questa è la strada che volevi prendere, eviterei (IMO confuso e potenzialmente pericoloso se non sai cosa stai facendo) di cercare attraverso la directory .git in primo luogo, e lo farei solo con alcuni comandi normali con un po 'di analisi "git log" (usando i flag appropriati per mostrare i rami, e per capire da quale shasum vuoi fare il checkout di un nuovo ramo), e poi farlo. Quindi, rimuovere il ramo con il nome traballante. Io disprezzo che git insiste sul fatto che è necessario capire tutti i suoi meccanismi interni di fare alcune cose, ma apprezzo molto che si può fare quelle cose.
Jon V,

È più difficile creare un ramo con una cattiva reputazione in 2.10.1+. Se lo fai in qualche modo, puoi usare git branch -v per ottenere la versione hash breve dei tuoi rami (aggiungi -r per il telecomando). È quindi possibile utilizzare git rev-parse <shorthash> per ottenere l'hash completo se necessario.
House of Dexter

67

Per rinominare un ramo localmente:

git branch -m [old-branch] [new-branch]

Ora dovrai propagare queste modifiche anche sul tuo server remoto.

Per inviare le modifiche al vecchio ramo eliminato:

git push origin :[old-branch]

Per spingere le modifiche alla creazione di una nuova filiale:

git push origin [new-branch]

57

Solo tre passaggi per replicare le modifiche nel nome remotee su GitHub:

Passo 1 git branch -m old_branchname new_branchname

Passo 2 git push origin :old_branchname new_branchname

Passaggio 3 git push --set-upstream origin new_branchname


2
Ho anche dovuto fare una cosa aggiuntiva: git push --set-upstream origin new_branchnameche è menzionata nella risposta di
@Nomade

2
Passaggio 3 non necessario. Tutto era aggiornato dopo il passaggio 2.
Dev

@Dev non in tutti i casi Dev, ho dovuto aggiornare di recente da quando ho usato bitbucket e codecommit, è necessario il passaggio 3
Harry_pb

40

Rinomina il ramo usando questo comando:

git branch -m [old_branch_name] [new_branch_name]

-m: Rinomina / sposta il ramo. Se esiste già un ramo, verrà visualizzato un errore.

Se esiste già un ramo e vuoi rinominarlo con quel ramo, usa:

 git rename -M [old_branch_name] [new_branch_name]

Per ulteriori informazioni sulla guida, utilizzare questo comando nel terminale:

git branch --help

o

man git branch

40

Gli utenti Advanced Git possono rinominare manualmente usando:

Rename the old branch under .git/refs/heads to the new name

Rename the old branch under .git/logs/refs/heads to the new name

Update the .git/HEAD to point to yout new branch name

34
  1. Rinomina la tua filiale locale.

Se sei nel ramo che vuoi rinominare:

git branch -m new-name

Se ti trovi in ​​un ramo diverso:

git branch -m old-name new-name
  1. Elimina il ramo remoto vecchio nome e invia il ramo locale nuovo nome.

git push origin :old-name new-name

  1. Reimpostare il ramo upstream per il ramo locale di nuovo nome. Passa al ramo e quindi:

git push origin -u new-name

O per un modo rapido per farlo, puoi usare questi 3 passaggi:

# Rinomina il ramo localmente

git branch -m old_branch new_branch  

# Elimina il vecchio ramo remoto

git push origin :old_branch  

# Premere il nuovo ramo, impostare il ramo locale per tenere traccia del nuovo telecomando

git push --set-upstream origin new_branch   

Riferimenti: https://www.w3docs.com/snippets/git/how-to-rename-git-local-and-remote-branches.html


questo funziona per me
Vazgen Manukyan il

26

Ecco tre passaggi: Un comando che puoi chiamare all'interno del tuo terminale e cambiare il nome della filiale.

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

Se hai bisogno di più: passo dopo passo, come cambiare il nome del ramo Git è un buon articolo a riguardo.


25

Probabilmente, come indicato da altri, si tratterà di una mancata corrispondenza del caso nella denominazione dei rami.

Se hai una situazione del genere, posso immaginare che tu sia su Windows, il che ti porterà anche a:

$ git branch -m CaseSensitive casesensitive
fatal: A branch named 'casesensitive' already exists.

Quindi devi fare un passaggio intermedio:

$ git branch -m temporary
$ git branch -m casesensitive

Niente di più.


1
Si noti che questa situazione potrebbe verificarsi anche su un Mac, che è anche (eccezionalmente fastidioso) senza distinzione tra maiuscole e minuscole nel suo file system.
Jon V,

In alternativa, è possibile utilizzare -Minvece di -meseguire questo tipo di rinominare "correzione casing" in un unico passaggio.
Jon Schneider,

23

Cercare di rispondere in modo specifico alla domanda (almeno il titolo).

Puoi anche rinominare la filiale locale , ma continua a tenere traccia del vecchio nome sul telecomando.

git branch -m old_branch new_branch
git push --set-upstream origin new_branch:old_branch

Ora, quando esegui git push, il riferimento remoto old_branchviene aggiornato con il tuo locale new_branch.

Devi conoscere e ricordare questa configurazione. Ma può essere utile se non hai la scelta per il nome del ramo remoto, ma non ti piace (oh, voglio dire, hai un ottimo motivo per non piacerti!) E preferisci un più chiaro nome per la tua filiale locale.

Giocando con la configurazione di recupero, puoi persino rinominare il riferimento remoto locale. cioè, avendo un refs/remote/origin/new_branchpuntatore ref al ramo, questo è in effetti old_branchon origin. Tuttavia, lo scoraggio vivamente, per la sicurezza della tua mente.


22

Cambiare la filiale localmente è abbastanza facile ...

Se ti trovi nella filiale per cui vuoi cambiare il nome, fai semplicemente questo:

git branch -m my_new_branch

Altrimenti, se ci si trova mastero in qualsiasi altro ramo diverso da quello che si desidera modificare il nome, è sufficiente:

git branch -m my_old_branch my_new_branch

Inoltre, creo l'immagine qui sotto per mostrarla in azione su una riga di comando . In questo caso, sei sul masterramo, ad esempio:

Cambia il nome della filiale localmente


21

Se sei disposto a utilizzare SourceTree (che consiglio vivamente), puoi fare clic con il tasto destro del mouse sul tuo ramo e scegliere 'Rinomina'.

inserisci qui la descrizione dell'immagine


20

Per rinominare il ramo corrente (ad eccezione dello stato HEAD distaccato) è anche possibile utilizzare questo alias:

[alias]
    mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'

18

Un'altra opzione è di non utilizzare affatto la riga di comando. Client Git GUI come SourceTree eliminano gran parte della curva / dolore dell'apprendimento sintattico che fa sì che domande come questa siano tra le più visualizzate su StackTranslate.it.

In SourceTree, fai clic con il pulsante destro del mouse su qualsiasi ramo locale nel riquadro "Rami" sulla sinistra e seleziona "Rinomina ...".


5
Non lo definirei dolore. Il comando git è molto facile da usare, una volta che hai visto questa risposta, probabilmente non tornerai mai più. Il problema è più che, a quanto pare, la documentazione della riga di comando git non è abbastanza intuitiva.
Nearoo,

1
Vero, ma con SourceTree non devo quasi mai preoccuparmi di controllare la documentazione. Tutto è generalmente intuitivo: basta fare clic destro e vedere quali sono le opzioni. (A proposito non sono affiliato con loro in alcun modo - proprio come lo strumento!)
Steve Chambers

17

Un modo semplice per farlo:

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

Per di più, vedi questo .


15

Poiché non si desidera inviare il ramo a un server remoto, questo esempio sarà utile:

Supponiamo che tu abbia un ramo esistente chiamato "my-hot-feature" e che desideri rinominarlo in "feature-15".

Innanzitutto, vuoi cambiare la tua filiale locale. Questo non potrebbe essere più semplice:

git branch -m my-hot-feature feature-15

Per ulteriori informazioni, è possibile visitare localmente e rinominare in remoto una filiale in Git .


13

Versione Git 2.9.2

Se vuoi cambiare il nome della filiale locale in cui ti trovi:

git branch -m new_name

Se vuoi cambiare il nome di un altro ramo:

git branch -m old_name new_name

Se si desidera modificare il nome di un ramo diverso con un nome già esistente:

git branch -M old_name new_name_that_already_exists

Nota: l'ultimo comando è distruttivo e rinominerà il tuo ramo, ma perderai il vecchio ramo con quel nome e quei commit perché i nomi dei rami devono essere univoci.


11

Se si desidera modificare il nome del ramo corrente, eseguire:

git branch -m [old_branch] [new_branch]

Se si desidera eliminare il vecchio ramo remoto, eseguire:

git push origin :[old_branch]

Se si desidera eliminare il vecchio ramo remoto e creare un nuovo ramo remoto, eseguire:

git push origin :old_branch new_branch

6

Git branch rename può essere fatto usando:

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

La differenza tra -m e -M :

-m: se stai provando a rinominare il tuo ramo con un nome di ramo esistente usando -m . Solleverà un errore dicendo che il ramo esiste già. Devi dare un nome univoco.

Ma,

-M: questo ti aiuterà a forzare la ridenominazione con un determinato nome, anche se esiste. Quindi un ramo esistente lo sovrascriverà interamente con esso ...

Ecco un esempio di terminale Git,

mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
  test
* test1
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -m test1 test
fatal: A branch named 'test' already exists.
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -M test1 test
mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
* test
mohideen@dev:~/project/myapp/sunithamakeup$

5

Per gli utenti di Git GUI non potrebbe essere molto più semplice. In Git GUI, scegli il nome del ramo dall'elenco a discesa nella finestra di dialogo "Rinomina ramo" creato dalla voce di menu Ramo: Rinomina, digita un nuovo nome e fai clic su "Rinomina". Ho evidenziato dove trovare l'elenco a discesa.

Rinomina un ramo Git locale


3

Se lo desidera:

  • Rinomina il repository Git, esegui: git branch -m <oldname> <newname>
  • Elimina il vecchio ramo di: git push origin: old-name new-name
  • Commettilo usando: git commit <newname>
    • e quindi spingere usando: git push origin new_branch_name:master
  • Se si desidera controllare lo stato, utilizzare: git status
  • Se vuoi dare un'occhiata allora usa: git checkout

3

Tutte le risposte precedenti stanno parlando git branch -m. Certo, è facile da usare, ma per me potrebbe essere un po 'difficile ricordare un altro comando Git. Quindi ho provato a fare il lavoro con il comando che conoscevo. Sì, potresti indovinarlo.

Io uso git branch -b <new_branch_name>. E se non vuoi salvare il vecchio ramo ora puoi eseguirlo git branch -D <old_branch_name>per rimuoverlo.

So che può essere un po 'noioso, ma è più facile da capire e ricordare. Spero sia utile per te.


Se hai problemi a ricordare i comandi, puoi impostare tu stesso gli alias di shell o git.
sean,

e se avessi bisogno di eseguire il comando su così tante macchine diverse?
Dai Kaixian,

1

In PhpStorm:

VCS → Git → Branch ... → Branch locali → _your_branch_ → Rinomina


0

Tutto quello che devi fare sono i tre passaggi:

  1. Dai al vecchio ramo sotto .git / refs / head il nuovo nome
  2. Assegna al vecchio ramo sotto .git / logs / refs / head il nuovo nome
  3. Aggiorna .git / HEAD per portare al tuo nuovo nome di filiale
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.