Rinominare un ramo in GitHub


297

Ho appena rinominato il mio ramo locale usando

git branch -m oldname newname

ma questo rinomina solo la versione locale del ramo. Come posso rinominare quello su GitHub?


5
possibile duplicato di git: rinomina ramo remoto
Andrew Marshall,

Hai controllato nelle impostazioni dell'amministratore? Il mio attuale progetto su github non ha alcun ramo ma puoi rinominare il repository lì, quindi penso che potresti rinominare anche i rami.
evanmcdonnal

12
@evanmcdonnal No, non è possibile rinominare un ramo Git dal sito GitHub.
Andrew Marshall,

Le risposte a questa domanda sono quasi universalmente sbagliate. La domanda non è come rinominare un ramo git, è come rinominare un ramo github . Molte cose su github sono legate a un ramo, il che significa che ogni risposta deve coprire quelle cose. Ad esempio, rinominando master in main
gman il

@gman Per quello che vale, sembra che queste risposte abbiano risposto allo spirito della domanda del PO. La domanda del PO potrebbe non essere stata formulata alla perfezione, da un punto di vista tecnicamente esigente o del problema rilevante che si sta attualmente esaminando. Ma poi, questa domanda non proviene da un profondo background tecnico di Git o GitHub. Da questa prospettiva, si può considerare questo un "principiante" o una domanda elementare. Come tale, è formulato e ha risposto in modo appropriato per questo pubblico. Frustrante, certo, ma penso che questo Q, queste Risposte siano appropriate / rilevanti, specialmente per Q di pre BLM git / Hub.
SherylHohman,

Risposte:


309

Come accennato, elimina quello vecchio su Github e premi nuovamente, anche se i comandi utilizzati sono un po 'più dettagliati del necessario:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Semplice. Sezionando un po 'i comandi, il comando git push è essenzialmente:

git push <remote> <local_branch>:<remote_branch>

Quindi fare un push senza local_branch specificato significa essenzialmente "non prendere nulla dal mio repository locale e renderlo il ramo remoto". Ho sempre pensato che fosse completamente divertente, ma è così.

Modifica: A partire da Git 1.7 esiste una sintassi alternativa per eliminare un ramo remoto:

git push origin --delete name_of_the_remote_branch

Modifica: come menzionato da @ void.pointer nei commenti

Si noti che è possibile combinare le 2 operazioni push:

git push origin :old_branch new_branch

Ciò eliminerà entrambi il vecchio ramo e spingerà quello nuovo.

Questo può essere trasformato in un semplice alias che prende il ramo remoto originale e il nuovo nome di ramo come argomenti, in ~/.gitconfig:

[alias]
    branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"

Uso:

git branchm origin old_branch new_branch

Si noti che gli argomenti posizionali nei comandi di shell erano problematici nelle versioni precedenti (pre 2.8?) Di git, quindi l'alias potrebbe variare in base alla versione di git. Vedi questa discussione per i dettagli.


32
Si noti che è possibile combinare le operazioni di spinta 2: git push origin :old_branch new_branch. Ciò eliminerà sia il vecchio ramo che spingerà quello nuovo.
void.pointer

4
C'è qualche motivo per cui il nuovo ramo non può essere spinto prima di eliminare quello vecchio? Personalmente preferisco i processi in cui l'operazione di eliminazione avviene dopo che l'operazione di creazione ha esito positivo, nel caso in cui qualcosa vada storto.
jmort253,

7
Non funziona. Rimetterà semplicemente il ramo su Github con il suo vecchio nome.
Geoff,

1
@AdamParkin 1. git branch -m new_branch(rinomina old_branch in new_branch) 2. git commit -m 'msg', 3. git push4. Mhmm, old_branch si presenta in Github, domanda di Google e sono guidato alla tua risposta 5. git push origin :old_branch(dice che è stato cancellato) 6. git push origin new_branch... completa quindi dice * [new branch] new_branch -> old_branch. Torna a Github e si old_branchpresenta di nuovo. Se elimino nell'interfaccia utente Web di Github, ho l'opzione "Ripristina", quindi sembra che il push del new_branch stia solo ripristinando.
Kcvin,

2
Una cosa da tenere presente è che quando si rinomina il ramo, eventuali richieste pull aperte rispetto a quella richiesta pull verranno automaticamente chiuse. Abbiamo dovuto rinominare il ramo e riaprire manualmente tutte le richieste pull ...
jmort253

24

I seguenti comandi hanno funzionato per me:

git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want

Questa è la breve risposta che funziona. A proposito, il primo comando potrebbe anche essere inserito come ultimo nella risposta.
Eric Wang,

questa risposta riguarda git non github
gman il

1
In realtà, l'ho fatto solo due volte e ha funzionato su Github.
spozun il

17

Ho trovato 3 comandi su come modificare il nome del tuo ramo git e questi comandi sono il modo più veloce 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

Se hai bisogno di istruzioni dettagliate, puoi leggere questo fantastico articolo

Come rinominare Git Branch locali e remoti


1
git push --set-upstreamè la parte più importante se ti capita di cambiare il nome della filiale localmente usando l'app github prima di cancellare la filiale remota.
Louis Yang,

questa risposta riguarda git non github
gman il

12

Basta rimuovere il vecchio ramo e crearne uno nuovo.

Esempio (rinominare esclusivamente il ramo remoto):

git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname

Probabilmente dovresti anche rinominare la filiale locale e modificare le impostazioni per dove premere / estrarre.


1
Il secondo comando non dovrebbe essere git push origin newname:refs/heads/newname? master e newname non possono puntare allo stesso commit.
Steve Folly

"master" è proprio come esempio, cambierà ora.
Vi.

Forse l'ordine di due comandi dovrebbe essere invertito (cioè carica prima il nuovo nome, rimuovi quello vecchio dopo)
Vi.

questa risposta riguarda git non github
gman il

@gman, non lo rinomina Git-saggio anche rinominarlo Github-saggio?
Vi.

9

Rinomina i rami in git locale e remoto

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.

Passa al ramo e quindi:

git push origin -u new-name

Quindi la conclusione è

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name

questa risposta riguarda git non github
gman il

Questo è per git e GitHub è sotto git quindi funzionerà e funzionerà con me e con gli altri
Abdelrahman Mohamed,

Non funziona Prova il primo e il secondo passaggio git branch -m new-name && git push origin :master new-name. Fallirà. Se questa risposta riguarda solo git e non github, questa domanda è un duplicato di molte altre domande e dovrebbe essere chiusa. Se si tratta davvero di github, la risposta deve riguardare github. Questa risposta no.
Gman,


2

Ecco cosa ha funzionato per me:

1.) Crea prima il nuovo ramo: git push github newname: refs / heads / newname

2.) Sul sito github, vai alle impostazioni e modifica il ramo Predefinito in nuovo nome

3.) Elimina il vecchio nome git push github - elimina vecchio nome


0
  1. Scarica Atlassian SourceTree (gratuito).
  2. Importa il clone locale del repository.
  3. Fai clic con il pulsante destro del mouse sul ramo per rinominarlo, nella barra laterale. Seleziona "Rinomina ramo ..." dal menu contestuale e rinominalo.
  4. Spingere verso l'origine.

Grazie, ma ho dovuto passare al ramo e importarlo.
Flash Sheridan,

1
questa risposta riguarda git non github
gman il

0

Questo articolo mostra come farlo davvero facile.
1. Per rinominare un ramo Git locale, possiamo usare il comando Git branch -m per modificare il nome:
git branch -m feature1 feature2
2. Se stai solo cercando il comando per rinominare un ramo Git remoto, questo è "
git push -u origin feature2:feature3
Verifica di non avere tag sul ramo prima di farlo. Puoi farlo con git tag.


questa risposta riguarda git non github
gman il

0

Un altro modo è quello di rinominare i seguenti file :

  1. navigare nella directory del progetto
  2. rinominare .git/refs/head/[branch-name]in.git/refs/head/new-branch-name
  3. rinominare .git/refs/remotes/[all-remote-names]/[branch-name]in.git/refs/remotes/[all-remote-names]/new-branch-name

Rinomina testa e telecomandi sia sul tuo PC locale che su origini / server remoti

Branch è ora rinominato (locale e remoto!)


Attenzione

Se il tuo nome di ramo corrente contiene barre ( /) git creerà le directory in questo modo:

nome della filiale attuale: "awe/some/branch"

  • .git/refs/head/awe/some/branch
  • .git/refs/remotes/[all-remote-names]/awe/some/branch

desidera il nome della filiale: "new-branch-name"

  1. navigare nella directory del progetto
  2. copia il branchfile da.git/refs/*/awe/some/
  3. mettilo dentro .git/refs/head/.
  4. copia il branchfile da tutti.git/refs/remotes/*/awe/some/
  5. inseriscili .git/refs/remotes/*/.
  6. rinominare tutti i branchfile impostati in new-branch-name.
  7. controlla se la struttura di directory e file ora appare così:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. fai lo stesso su tutte le tue origini / server remoti (se esiste)
    • info : sui server remoti di solito non ci sono refs / telecomandi / * directory perché sei già su server remoto;) (forse in configurazioni git avanzate potrebbe essere possibile, ma non l'ho mai visto)

Branch è ora rinominato da awe/some/branchin new-branch-name(locale e remoto!)

Le directory nel nome del ramo sono state rimosse.


Informazioni: in questo modo potrebbe non essere il migliore, ma funziona comunque per le persone che potrebbero avere problemi con gli altri modi


questa risposta riguarda git non github
gman il

0

Nel mio caso, avevo bisogno di un comando aggiuntivo per ottenere il mio ramo rinominato su cui eseguire il push .
git branch --unset-upstream
origin newname

(Per facilità di digitazione), per prima cosa git checkout oldname.
Quindi eseguire quanto segue:

git branch -m newname
git push origin :oldname oppure oppuregit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Questo passaggio aggiuntivo può essere necessario solo perché (tendo a) configurare il monitoraggio remoto sui miei rami tramite . In questo modo, quando ho effettuato il check-out, successivamente ho solo bisogno di digitare anzichégit push -u origin oldnameoldnamegit pushgit push origin oldname

Se non uso git branch --unset-upstreamprima il comando git push origin newbranch, git ricrea oldbranch e spinge newbrancha origin oldbranch- sconfiggendo il mio intento.


questa risposta riguarda git non github
gman il

@gman Punto preso. La mia soluzione usa git localmente per rinominare un ramo su GitHub, da remoto, dopo averlo rinominato nella copia git locale del repository GitHub. Quindi forse potrebbe essere considerata una soluzione specializzata, perché quando si desidera utilizzare la riga di comando, anziché l'interfaccia del sito Web GitHub, e si dispone di un clone locale che si desidera aggiornare. Grazie per evidenziare questa distinzione e chiarire che questa risposta è per un caso speciale, piuttosto che una soluzione generale.
SherylHohman,

Il problema è che github lega le funzionalità ai rami. Prova a rinominare master in main e le tue istruzioni falliranno.
Gman,

-1

I seguenti comandi rinominano il ramo localmente, eliminano il vecchio ramo nella posizione remota e spingono il nuovo ramo, impostando il ramo locale per tenere traccia del nuovo telecomando:

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

Sebbene lo snippet di codice possa risolvere il problema, dovresti descrivere qual è lo scopo del tuo codice (come risolve il problema). Inoltre, potresti voler controllare stackoverflow.com/help/how-to-answer
Ahmad F

questa risposta riguarda git non github
gman il

-1

Semplice . Per rinominare git branch localmente e in remoto usa questo snippet (testato e funziona come un incantesimo):

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

Spiegazione:

  1. Rinomina passaggio:

    Riferimento Git: con un'opzione -m o -M , verrà rinominato in. Se aveva un reflog corrispondente, viene rinominato in modo da corrispondere e viene creata una voce reflog per ricordare la ridenominazione del ramo. Se esiste, -M deve essere usato per forzare la ridenominazione.

  2. Elimina passaggio:

    Riferimento Git: git push origine: sperimentale Trova un riferimento che corrisponda a sperimentale nel repository di origine (ad esempio refs / heads / sperimentale) ed eliminalo.

  3. Aggiornamento su repository remoto Step (riferimento a monte per il monitoraggio):

    Riferimento Git: --set-upstream Per ogni ramo aggiornato o inviato con successo, aggiungi il riferimento upstream (tracking), usato da git-pull [1] senza argomenti e altri comandi. Per ulteriori informazioni, vedere branch..merge in git-config [1].


questa risposta riguarda git non github
gman il

-1

3 semplici passaggi

  • git push testa di origine

  • git branch -m vecchio-ramo-nome nuovo-ramo-nome

  • git push testa di origine


questa risposta riguarda git non github
gman il

-1

Sul ramo git esegui git branch -m nome_vecchio new_name Questo modificherà il nome del ramo sul repository locale git push origin: old_name new_name Questo spingerà il nome modificato in remoto ed eliminerà il vecchio ramo git push origin -u new_name Imposta il ramo locale da tracciare ramo remoto. Questo risolve il problema


questa risposta riguarda git non github
gman il
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.