Jak zmienić nazwę zarówno oddziału lokalnego, jak i zdalnego Git?

458

Mam cztery gałęzie, takie jak master -> origin / regacy, FeatureA -> origin / FeatureA. Jak widać, wpisałem niewłaściwe imię.

Chcę więc zmienić nazwę zdalnej gałęzi (origin / regacy → origin / legacy lub origin / master)

Próbuję polecenia poniżej:

git remote rename regacy legacy

Ale konsola Git zwróciła mi komunikat o błędzie.

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

Jak mogę rozwiązać ten problem?

JayD
źródło

Odpowiedzi:

810

Wpisz opis zdjęcia tutaj


Istnieje kilka sposobów na osiągnięcie tego:

  1. Zmień oddział lokalny, a następnie wypchnij zmiany
  2. Wciśnij gałąź do pilota z nową nazwą, zachowując oryginalną nazwę lokalnie

Zmiana nazwy lokalnej i zdalnej

# 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>

Wpisz opis zdjęcia tutaj


Zmiana nazwy tylko zdalnej gałęzi

Źródło : 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>

Ważna uwaga:

Kiedy używasz git branch -m(przenieś), Git aktualizuje również gałąź śledzenia nową nazwą.

git remote rename legacy legacy

git remote renamepróbuje zaktualizować sekcję zdalną w pliku konfiguracyjnym. Zmieni nazwę pilota z podaną nazwą na nową, ale w twoim przypadku nie znalazł żadnej, więc zmiana nazwy nie powiodła się.

Ale nie zrobi tego, co myślisz; zmieni nazwę zdalną konfiguracji lokalnej, a nie zdalną gałąź. 


Uwaga: Serwery Git mogą umożliwiać zmianę nazwy gałęzi Git przy użyciu interfejsu internetowego lub programów zewnętrznych (takich jak Sourcetree itp.), Ale należy pamiętać, że w Git cała praca jest wykonywana lokalnie, dlatego zaleca się stosowanie powyższych poleceń do pracy.

CodeWizard
źródło
Nadal musisz coś zrobić, po powyższym, a kiedy próbuję pociągnąć, dostaję wiadomość:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Krzysztof Krasoń
6
Nie zapomnij rozbroić starego źródła:git checkout <new_name> ; git branch --unset-upstream
Miguel Ping
2
Komentarz @ MiguelPing jest ważny. Kiedy próbuję zmienić nazwę gałęzi, już wypchnąłem na github, usuwając, zmieniając nazwę lokalną i ponowne wypychanie skutkuje ponownym użyciem starej nazwy. Jeśli ja --unset-upstreamprzed ponownym pchaniem, działa zgodnie z przeznaczeniem.
Adam Tuttle
1
Czy istnieje sposób na uniknięcie automatycznego zamykania otwartych PR na gałęzi starego imienia na pilocie? Zmierzyłem się z tym w gitlab, gdzie PR na starej nazwie oddziału został zamknięty po wypchnięciu do źródła.
Himanshu Tanwar
142

Jeśli nazwa gałęzi została podana niepoprawnie ORAZ wypchnęła to do zdalnego repozytorium, wykonaj następujące kroki, aby zmienić nazwę tej gałęzi ( na podstawie tego artykułu ):

  1. Zmień nazwę swojego lokalnego oddziału:

    • Jeśli jesteś w oddziale, którego nazwę chcesz zmienić:
      git branch -m new-name

    • Jeśli jesteś w innym oddziale:
      git branch -m old-name new-name

  2. Usuń old-namegałąź zdalną i wypchnij new-namegałąź lokalną :
    git push origin :old-name new-name

  3. Zresetuj gałąź nadrzędną dla gałęzi lokalnej o nowej nazwie :
    Przełącz na gałąź, a następnie:
    git push origin -u new-name

ZILONG PAN
źródło
1
Po pierwszych 2 krokach, jeśli pojawi się komunikat o błędzie dotyczący bieżącej gałęzi, wskazuje na gałąź nieistnienia na zdalnym repozytorium, trzeci krok naprawia to
Kevin Hooke,
1
@ Dr1Ku Musisz znać różnicę między git push <remote> --delete old_name&, git push origin :old-name new-nameaby usunąć gałąź.
Ashutosh Chamoli,
Użytkownicy BitBucket: napraw błąd w kroku 2 w przypadku zmiany nazwy master, w Szczegółach repozytorium ustaw domyślną gałąź na nową gałąź. Błąd jest następujący: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,
najłatwiejszy między innymi
Abdulla Nilam
37

Wydaje się, że istnieje bezpośredni sposób:

Jeśli naprawdę chcesz po prostu zmienić nazwę gałęzi zdalnie (bez zmiany nazwy żadnych oddziałów lokalnych w tym samym czasie), możesz to zrobić za pomocą jednego polecenia, takiego jak

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

Zdalna zmiana nazw oddziałów w Git

Zobacz oryginalną odpowiedź, aby uzyskać więcej szczegółów.

ptim
źródło
1
Nie działał w git 2.20.1Usunięto stary oddział, ale nowy nie został utworzony.
Paul Razvan Berg
26

Można to również zrobić w następujący sposób.

Najpierw zmień nazwę oddziału lokalnego, a następnie oddziału zdalnego.

Zmiana nazwy lokalnego oddziału:

Jeśli zalogowany w innym oddziale,

git branch -m old_branch new_branch 

Jeśli zalogowany w tym samym oddziale,

git branch -m new_branch

Zmiana nazwy oddziału zdalnego:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch
Atequer Rahman
źródło
5

Jeśli już wysłałeś niewłaściwą nazwę do pilota, wykonaj następujące czynności:

  1. Przejdź do lokalnego oddziału, którego nazwę chcesz zmienić

    git checkout <old_name>

  2. Zmień nazwę lokalnego oddziału

    git branch -m <new_name>

  3. Naciśnij <new_name>gałąź lokalną i zresetuj gałąź nadrzędną

    git push origin -u <new_name>

  4. Usuń <old_name>zdalną gałąź

    git push origin --delete <old_name>

Zostało to oparte na tym artykule .

milemeow
źródło
4

Mocowanie prostego urywek na zmianę nazwy bieżącej Branch (lokalnej i na pochodzenie):

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

Wyjaśnienie z docs git:

nazwa gałęzi git -m lub -M zostanie zmieniona na. Jeśli miał odpowiedni dziennik rejestrowania, jego nazwa jest dopasowywana i tworzony jest wpis dziennika rejestrowania w celu zapamiętania zmiany nazwy gałęzi. Jeśli istnieje, należy użyć opcji -M, aby wymusić zmianę nazwy.

Specjalny refspec: (lub +: aby umożliwić aktualizacje nie do szybkiego przewijania) poleca Gitowi wypychanie „pasujących” gałęzi: dla każdej gałęzi, która istnieje po stronie lokalnej, strona zdalna jest aktualizowana, jeśli gałąź o tej samej nazwie już istnieje po drugiej stronie.

--set-upstream Skonfiguruj informacje śledzenia, więc jest uważane za gałąź upstream. Jeśli nie określono, to domyślnie jest to bieżąca gałąź.

avivamg
źródło
3

Nie ma bezpośredniej metody,

  1. Zmień nazwę oddziału lokalnego ,

    Moja obecna gałąź to master

    git branch -m master_renamed #master_renamed to nowa nazwa mistrza

  2. Usuń zdalną gałąź,

    git push origin --delete master #origin to nazwa_zdalna

  3. Wciśnij gałąź o zmienionej nazwie do pilota,

    git push origin master_renamed

Otóż ​​to...

Mohideen bin Mohammed
źródło
Ładne i proste i tylko 3 kroki. Jedyne ulepszenie, które mogę zasugerować, to git push -u origin master_renamedustawić gałąź jako gałąź śledzenia
ut9081 17.09.19
2

Można to zrobić nawet bez zmiany nazwy oddziału lokalnego w trzech prostych krokach:

  1. Przejdź do swojego repozytorium w GitHub
  2. Utwórz nową gałąź ze starej gałęzi, której nazwę chcesz zmienić
  3. Usuń starą gałąź
Code_Mode
źródło
0

Używam tych aliasów git i robi to prawie automatycznie:

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;'

Zastosowanie: git move FROM_BRANCH TO_BRANCH

Działa, jeśli masz domyślne nazwy, takie jak master, origin itp. Możesz modyfikować, jak chcesz, ale daje to pomysł.

Tarik
źródło
0

Musiałem wykonać następujące zadanie, aby zmienić nazwę oddziału lokalnego i zdalnego:

# 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>
Sebastian Viereck
źródło
Czym różni się od istniejącej odpowiedzi?
Himanshu Tanwar
0
  1. Zmień nazwę swojego lokalnego oddziału. Jeśli jesteś w oddziale, którego nazwę chcesz zmienić:

    gałąź git -m nowa-nazwa

Jeśli jesteś w innym oddziale:

git branch -m old-name new-name
  1. Usuń gałąź zdalną o starej nazwie i wciśnij gałąź lokalną o nowej nazwie.

    git push origin: stara nazwa nowa nazwa

  2. Zresetuj gałąź nadrzędną dla gałęzi lokalnej o nowej nazwie. Przejdź do oddziału, a następnie:

    git push origin -u nowa-nazwa

Wszystko gotowe!

Anupam Maurya
źródło
0
  • Zmień nazwę swojego lokalnego oddziału .

Jeśli jesteś w oddziale, którego nazwę chcesz zmienić:

git branch -m new-name

jeśli obecnie przebywasz w innym oddziale:

git branch -m old-name new-name
  • Usuń gałąź zdalną o starej nazwie i wciśnij gałąź lokalną o nowej nazwie.

Pozostań w gałęzi docelowej i:

git push origin :old-name new-name
  • Zresetuj gałąź nadrzędną dla gałęzi lokalnej o nowej nazwie.

Przejdź do gałęzi docelowej, a następnie:

git push origin -u new-name
Vitaliy Andrusishyn
źródło