Come posso rinominare un nome di filiale locale e remoto di Git?


460

Ho quattro rami come master -> origin / regacy, FeatureA -> origin / FeatureA. Come puoi vedere, ho digitato il nome sbagliato.

Quindi voglio rinominare un nome di ramo remoto (origine / regacy → origine / legacy o origine / master)

Provo il comando qui sotto:

git remote rename regacy legacy

Ma la console Git mi ha restituito un messaggio di errore.

 error : Could not rename config section 'remote.regacy' to 'remote.legacy'

Come posso risolvere questo problema?




Risposte:


813

Inserisci qui la descrizione dell'immagine


Ci sono alcuni modi per farlo:

  1. Cambia la tua filiale locale e poi spingi le tue modifiche
  2. Spingere il ramo sul telecomando con il nuovo nome mantenendo il nome originale localmente

Rinominare locale e remoto

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

# Delete the old branch on remote - where <remote> is, for example, origin
git push <remote> --delete <old_name>

# Or shorter way to delete remote branch [:]
git push <remote> :<old_name>

# Push the new branch to remote
git push <remote> <new_name>

# Reset the upstream branch for the new_name local branch
git push <remote> -u <new_name>

Inserisci qui la descrizione dell'immagine


Rinomina solo filiale remota

Credito: ptim

# In this option, we will push the branch to the remote with the new name
# While keeping the local name as is
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Nota importante:

Quando usi git branch -m(sposta), Git aggiorna anche il tuo ramo di tracciamento con il nuovo nome.

git remote rename legacy legacy

git remote renamesta tentando di aggiornare la sezione remota nel file di configurazione. Rinominerà il telecomando con il nome dato con il nuovo nome, ma nel tuo caso non ne ha trovato nessuno, quindi la ridenominazione non è riuscita.

Ma non farà ciò che pensi; rinominerà il nome remoto della configurazione locale e non il ramo remoto. 


Nota I server Git potrebbero consentire di rinominare i rami Git utilizzando l'interfaccia Web o programmi esterni (come Sourcetree, ecc.), Ma è necessario tenere presente che in Git tutto il lavoro viene eseguito localmente, quindi si consiglia di utilizzare i comandi sopra al lavoro.


Devi ancora fare qualcosa, dopo quanto sopra e quando provo a tirare ricevo il messaggio:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Krzysztof Krasoń

6
Non dimenticare di disinserire il vecchio monte:git checkout <new_name> ; git branch --unset-upstream
Miguel Ping

2
Il commento di MiguelPing è importante. Quando ho provato a rinominare un ramo, ho già inviato a github, eliminando, rinominando local, e ripetendo i risultati il ​​vecchio nome viene riutilizzato. Se --unset-upstreamprima di premere nuovamente, funziona come previsto.
Adam Tuttle,

1
C'è un modo per evitare la chiusura automatica dei PR aperti sul ramo vecchio nome sul telecomando? Di fronte a ciò in gitlab, dove il PR sul vecchio nome del ramo veniva chiuso dopo aver spinto all'origine.
Himanshu Tanwar,

143

Se il nome di un ramo è stato erroneamente inviato e inviato al repository remoto, attenersi alla seguente procedura per rinominare quel ramo ( basato su questo articolo ):

  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. Elimina il old-nameramo remoto e invia il new-nameramo locale :
    git push origin :old-name new-name

  3. Reimpostare il ramo upstream per il nuovo ramo locale :
    passare al ramo e quindi:
    git push origin -u new-name


1
Dopo i primi 2 passaggi, se viene visualizzato un messaggio di errore relativo al ramo corrente che punta a un ramo inesistente sul repository remoto, il 3 ° passaggio risolve questo problema
Kevin Hooke,

1
@ Dr1Ku È necessario conoscere la differenza tra git push <remote> --delete old_name& git push origin :old-name new-nameper eliminare un ramo.
Ashutosh Chamoli,

Utenti BitBucket: correggere l'errore al passaggio 2 in caso di ridenominazione master, in Dettagli reimpostazione impostare il ramo predefinito su nuovo ramo. L'errore è:By default, deleting the current branch is denied, because the next 'git clone' won't result in any file checked out, causing confusion. You can set 'receive.denyDeleteCurrent' configuration variable to 'warn' or 'ignore' in the remote repository to allow deleting the current branch, with or without a warning message. To squelch this message, you can set it to 'refuse'. error: refusing to delete the current branch: refs/heads/master
Colin,

tra i più facili
Abdulla Nilam il

37

Sembra che ci sia un modo diretto:

Se vuoi davvero solo rinominare i rami da remoto (senza rinominare i rami locali contemporaneamente) puoi farlo con un singolo comando come

git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Rinominare le filiali in remoto in Git

Vedi la risposta originale per maggiori dettagli.


1
Non ha funzionato in git 2.20.1Eliminato il vecchio ramo ma quello nuovo non è stato creato.
Paul Razvan Berg,

26

Può anche essere fatto nel modo seguente.

Inizialmente, rinomina il ramo locale, quindi il ramo remoto.

Rinominare la filiale locale:

Se hai effettuato l'accesso in un altro ramo,

git branch -m old_branch new_branch 

Se hai effettuato l'accesso nello stesso ramo,

git branch -m new_branch

Rinominare la filiale remota:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch

5

Se hai già inserito il nome sbagliato in remoto, procedi come segue:

  1. Passa al ramo locale che desideri rinominare

    git checkout <old_name>

  2. Rinomina il ramo locale

    git branch -m <new_name>

  3. Premere il <new_name>ramo locale e reimpostare il ramo a monte

    git push origin -u <new_name>

  4. Elimina il <old_name>ramo remoto

    git push origin --delete <old_name>

Questo era basato su questo articolo .


4

Allegare uno snippet semplice per rinominare il ramo corrente (locale e di origine):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

Spiegazione dai documenti git:

git branch -m o -M, verranno rinominati. Se aveva un reflog corrispondente, viene rinominato in modo che corrisponda e viene creata una voce reflog per ricordare la ridenominazione del ramo. Se esiste, -M deve essere usato per forzare la ridenominazione.

Lo speciale refspec: (o +: per consentire aggiornamenti non rapidi) indica a Git di inviare i rami "corrispondenti": per ogni ramo esistente sul lato locale, il lato remoto viene aggiornato se esiste già un ramo con lo stesso nome sul lato remoto.

--set-upstream Imposta le informazioni di tracciamento in modo tale da essere considerato il ramo upstream. Se non viene specificato no, viene impostato automaticamente il ramo corrente.


3

Non esiste un metodo diretto,

  1. Rinomina filiale locale ,

    Il mio ramo attuale è maestro

    git branch -m master_renamed #master_renamed è il nuovo nome di master

  2. Elimina ramo remoto,

    git push origin --delete master #origin è remote_name

  3. Inserisci il ramo rinominato in remoto,

    git push origin master_renamed

Questo è tutto...


Bello e semplice e solo 3 passaggi. L'unico miglioramento che posso suggerire è git push -u origin master_renameddi impostare il ramo come ramo di tracciamento
ut9081,

2

Questo può essere fatto anche senza rinominare il ramo locale in tre semplici passaggi:

  1. Vai al tuo repository in GitHub
  2. Creare un nuovo ramo dal vecchio ramo che si desidera rinominare
  3. Elimina il vecchio ramo

0

Uso questi alias git e fa praticamente il lavoro automaticamente:

git config --global alias.move '!git checkout master; git branch -m $1 $2; git status; git push --delete origin $1; git status; git push -u origin $2; git branch -a; exit;'

Utilizzo: git move FROM_BRANCH TO_BRANCH

Funziona se hai i nomi predefiniti come master, origin ecc. Puoi modificarlo come desideri ma ti dà l'idea.


0

Ho dovuto svolgere la seguente attività per rinominare il ramo locale e remoto:

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

#  Delete the old remote branch
git push origin --delete <old_name>

# push to new remote branch - creates new remote branch
git push origin <new_name>

# set new remote branch as default remote branch for local branch
git branch --set-upstream-to=origin/<new_name> <new_name>

In che modo differisce dalla risposta esistente?
Himanshu Tanwar,

0
  1. Rinomina la tua filiale locale. Se sei nel ramo che vuoi rinominare:

    git branch -m nuovo nome

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: vecchio nome nuovo nome

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

    git push origin -u nuovo nome

Tutto stabilito!


0
  • Rinomina la tua filiale locale .

Se sei nel ramo che vuoi rinominare:

git branch -m new-name

se rimani su un ramo diverso al momento attuale:

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

Rimani sul ramo di destinazione e:

git push origin :old-name new-name
  • Reimpostare il ramo upstream per il ramo locale di nuovo nome.

Passa al ramo di destinazione e quindi:

git push origin -u new-name
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.