Zmiana nazwy oddziału w GitHub

296

Właśnie zmieniłem nazwę mojego lokalnego oddziału, używając

git branch -m oldname newname

ale zmienia to tylko lokalną wersję oddziału. Jak mogę zmienić nazwę na GitHub?

zaklęcie
źródło
5
możliwy duplikat git: zmień nazwę zdalnego oddziału
Andrew Marshall
Czy sprawdziłeś w ustawieniach administratora? Mój obecny projekt na githubie nie ma żadnych gałęzi, ale możesz zmienić tam nazwę repozytorium, więc sądzę, że możesz również zmienić nazwy gałęzi.
evanmcdonnal
12
@evanmcdonnal Nie, nie można zmienić nazwy oddziału Git z witryny GitHub.
Andrew Marshall
Odpowiedzi na to pytanie są prawie całkowicie błędne. Pytanie nie dotyczy tego, jak zmienić nazwę gałęzi git, ale jak zmienić nazwę gałęzi github . Wiele rzeczy na githubie jest powiązanych z gałęzią, co oznacza, że ​​każda odpowiedź musi obejmować te rzeczy. Na przykład zmiana nazwy master na main
gman
@gman Wydaje się, że te wartości były odpowiedzią na pytanie OP. Pytanie OP może nie zostać idealnie sformułowane z technicznie wymagającego punktu widzenia lub odpowiedniego problemu, nad którym obecnie się zastanawiasz. Ale to pytanie nie pochodzi z głębokiego zaplecza technicznego ani git, ani GitHub. Z tej perspektywy można uznać to za pytanie „początkujące” lub elementarne. Jako taki jest sformułowany i odpowiedział odpowiednio dla tej grupy odbiorców. Frustrujące, jasne, ale myślę, że te Q, Odpowiedzi te są odpowiednie / istotne, szczególnie dla Q użycia git / Hub sprzed BLM.
SherylHohman

Odpowiedzi:

309

Jak wspomniano, usuń stary na Github i ponownie wypchnij, chociaż użyte polecenia są bardziej szczegółowe niż to konieczne:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Prosty. Rozróżniając nieco polecenia, polecenie git push jest zasadniczo:

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

A zatem robienie wypychania bez podanego adresu local_branch oznacza w zasadzie „nie pobieraj niczego z mojego lokalnego repozytorium i uczyń go zdalną gałęzią”. Zawsze uważałem, że jest to całkowicie nieprzyzwoite, ale tak właśnie się dzieje.

Edycja: Począwszy od Git 1.7 istnieje alternatywna składnia do usuwania zdalnej gałęzi:

git push origin --delete name_of_the_remote_branch

Edycja: Jak wspomniano w komentarzach @ void.pointer

Pamiętaj, że możesz połączyć 2 operacje wypychania:

git push origin :old_branch new_branch

Spowoduje to zarówno usunięcie starej gałęzi, jak i wypchnięcie nowej.

Można to zmienić w prosty alias, który przyjmuje jako argument zdalną, oryginalną gałąź i nową gałąź w ~/.gitconfig:

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

Stosowanie:

git branchm origin old_branch new_branch

Zauważ, że argumenty pozycyjne w poleceniach powłoki były problematyczne w starszych (wcześniejszych niż 2.8?) Wersjach git, więc alias może się różnić w zależności od wersji git. Zobacz tę dyskusję, aby uzyskać szczegółowe informacje.

Adam Parkin
źródło
32
Należy pamiętać, że można połączyć operacje 2 Naciśnij: git push origin :old_branch new_branch. Spowoduje to zarówno usunięcie starej gałęzi, jak i wypchnięcie nowej.
void.pointer
4
Czy jest jakiś powód, dla którego nowa gałąź nie może zostać wypchnięta przed usunięciem starej? Osobiście wolę procesy, w których operacja usuwania ma miejsce po pomyślnym zakończeniu operacji tworzenia, na wypadek, gdyby coś poszło nie tak.
jmort253
7
Nie działa. Po prostu przywróci gałąź Github ze swoją starą nazwą.
geoff
1
@AdamParkin 1. git branch -m new_branch(zmień nazwę old_branch na new_branch) 2. git commit -m 'msg', 3. git push4. Mhmm, old_branch pojawia się w Github, pytanie Google, a ja jestem poproszony o odpowiedź 5. git push origin :old_branch(mówi, że została usunięta) 6. git push origin new_branch... wypełnia, a następnie mówi * [new branch] new_branch -> old_branch. Wróć do Github i old_branchpojawi się ponownie. Jeśli usunę w internetowym interfejsie Github, mam opcję „Przywróć”, więc wygląda na to, że naciśnięcie nowej_gałęzi po prostu przywraca.
Kcvin
2
Jedną z rzeczy, o których należy pamiętać, jest to, że kiedy zmienisz nazwę oddziału, wszystkie otwarte żądania ściągania w stosunku do tego żądania ściągania zostaną automatycznie zamknięte. Musieliśmy zmienić nazwę oddziału, a następnie ręcznie otworzyć ponownie wszystkie żądania ściągnięcia ....
jmort253
24

Dla mnie działały następujące polecenia:

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
Taimoor Changaiz
źródło
To krótka odpowiedź, która działa. BTW, pierwsza komenda może być również umieszczona jako ostatnia w odpowiedzi.
Eric Wang
ta odpowiedź obejmuje git not github
gman
1
Właściwie zrobiłem to dwa razy i działało to na githubie.
spozun
17

Znalazłem 3 polecenia, jak możesz zmienić nazwę gałęzi git, i te polecenia są szybszym sposobem na to

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

Jeśli potrzebujesz krok po kroku, możesz przeczytać ten świetny artykuł

Jak zmienić nazwę Git na oddziały lokalne i zdalne

Hazarapet Tunanyan
źródło
1
git push --set-upstreamjest najważniejszą częścią, jeśli zdarzy ci się zmienić nazwę oddziału lokalnie za pomocą aplikacji github przed usunięciem oddziału zdalnego.
Louis Yang
ta odpowiedź obejmuje git not github
gman
12

Po prostu usuń starą gałąź i utwórz nową.

Przykład (wyłącznie zmiana nazwy oddziału zdalnego):

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

Prawdopodobnie powinieneś również zmienić nazwę lokalnego oddziału i zmienić ustawienia dotyczące tego, gdzie należy pchać / wyciągać.

Vi.
źródło
1
Czy drugie polecenie nie powinno być git push origin newname:refs/heads/newname? master i newname nie mogą wskazywać na to samo zatwierdzenie.
Steve Folly
„master” jest tylko przykładem, zmieni się teraz.
Vi.
Może kolejność dwóch poleceń powinna zostać odwrócona (tzn. Najpierw załaduj nową nazwę, potem usuń starą)
Vi.
ta odpowiedź obejmuje git not github
gman
@gman, Czy zmiana nazwy Git-wise również powoduje zmianę nazwy na Github-mądry?
Vi.
9

Zmień nazwy gałęzi w git lokalnym i zdalnym

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ń gałąź zdalną o starej nazwie i wciśnij gałąź lokalną o nowej nazwie.

git push origin :old-name new-name

3. Zresetuj gałąź nadrzędną dla gałęzi lokalnej o nowej nazwie.

Przejdź do oddziału, a następnie:

git push origin -u new-name

Wniosek jest taki

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name
Abdelrahman Mohamed
źródło
ta odpowiedź obejmuje git not github
gman
To jest dla git, a GitHub jest pod gitem, więc będzie działać i będzie działać ze mną i innymi
Abdelrahman Mohamed
To nie działa Spróbuj pierwszego i drugiego kroku git branch -m new-name && git push origin :master new-name. To zawiedzie. Jeśli ta odpowiedź dotyczy tylko git, a nie github, to pytanie jest duplikatem kilku innych pytań i powinno zostać zamknięte. Jeśli tak naprawdę chodzi o github, odpowiedź musi obejmować github. Ta odpowiedź nie.
gman
2

Oto, co zadziałało dla mnie:

1.) Najpierw utwórz nowy oddział: git push github newname: refs / heads / newname

2.) Na stronie github, przejdź do ustawień goto i zmień domyślną gałąź na newname

3.) Usuń starą nazwę git push github - usuń starą nazwę

Wiley
źródło
0
  1. Pobierz Atlassian SourceTree (bezpłatny).
  2. Zaimportuj lokalny klon repozytorium.
  3. Kliknij prawym przyciskiem myszy gałąź, aby zmienić nazwę, na pasku bocznym. Wybierz „Zmień nazwę gałęzi ...” z menu kontekstowego i zmień nazwę.
  4. Naciśnij, aby rozpocząć.
Inżynier
źródło
Dzięki, ale musiałem przejść do oddziału i go zaimportować.
Flash Sheridan
1
ta odpowiedź obejmuje git not github
gman
0

W tym artykule pokazano, jak to zrobić naprawdę łatwo.
1. Aby zmienić nazwę lokalnego oddziału Git, możemy użyć polecenia Git branch -m w celu zmodyfikowania nazwy:
git branch -m feature1 feature2
2. Jeśli szukasz polecenia zmiany nazwy zdalnego oddziału Git, to jest to: „
git push -u origin feature2:feature3
Sprawdź, czy nie masz tagi na gałęzi, zanim to zrobisz. Możesz to zrobić za pomocą git tag.

Daniel Kobe
źródło
ta odpowiedź obejmuje git not github
gman
0

Innym sposobem jest zmiana nazwy następujących plików :

  1. przeglądaj katalog projektu
  2. zmień nazwę .git/refs/head/[branch-name]na.git/refs/head/new-branch-name
  3. zmień nazwę .git/refs/remotes/[all-remote-names]/[branch-name]na.git/refs/remotes/[all-remote-names]/new-branch-name

Zmień nazwę głowy i pilotów na komputerze lokalnym i na źródłach / zdalnych serwerach

Nazwa oddziału została zmieniona (lokalna i zdalna!)


Uwaga

Jeśli twoja obecna nazwa gałęzi zawiera ukośniki ( /), git utworzy katalogi w następujący sposób:

obecna nazwa oddziału: "awe/some/branch"

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

życzę nazwa oddziału: "new-branch-name"

  1. przeglądaj katalog projektu
  2. skopiuj branchplik z.git/refs/*/awe/some/
  3. włóż to .git/refs/head/.
  4. skopiuj branchplik ze wszystkich.git/refs/remotes/*/awe/some/
  5. włóż je .git/refs/remotes/*/.
  6. zmień nazwę wszystkich ukrytych branchplików na new-branch-name.
  7. sprawdź, czy struktura katalogów i plików wygląda teraz tak:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. zrób to samo na wszystkich swoich zdalnych źródłach / serwerach (jeśli istnieje)
    • info : na zdalnych serwerach zwykle nie ma katalogów referencji / pilotów / *, ponieważ jesteś już na zdalnym serwerze;) (no może w zaawansowanych konfiguracjach git może być to możliwe, ale nigdy tego nie widziałem)

Nazwa oddziału teraz zmienia się z awe/some/branchna new-branch-name(lokalna i zdalna!)

Katalogi w nazwie oddziału zostały usunięte.


Informacje: Ten sposób może nie być najlepszy, ale nadal działa dla osób, które mogą mieć problemy z innymi sposobami

Iyashi
źródło
ta odpowiedź obejmuje git not github
gman
0

W moim przypadku potrzebowałem dodatkowego polecenia, aby moja gałąź o zmienionej nazwie przyspieszyła
git branch --unset-upstream
origin newname .

(Dla ułatwienia pisania), najpierw git checkout oldname.
Następnie uruchom następujące czynności:

git branch -m newname
git push origin :oldname lub lubgit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Ten dodatkowy krok może być konieczny tylko dlatego, że (zazwyczaj) konfiguruję zdalne śledzenie w moich oddziałach za pośrednictwem . W ten sposób, kiedy się wymelduję, potrzebuję tylko typu zamiastgit push -u origin oldnameoldnamegit pushgit push origin oldname

Jeśli ja nie użyć polecenia git branch --unset-upstreamprzed git push origin newbranchgit ponownie tworzy oldbranch i popycha newbranchdo origin oldbranch- moim zamiarem pokonania.

SherylHohman
źródło
ta odpowiedź obejmuje git not github
gman
@gman Punkt zajęty. Moje rozwiązanie używa git lokalnie do zmiany nazwy gałęzi na GitHub, zdalnie, po zmianie nazwy na lokalnej kopii git repozytorium GitHub. Być może może to być uznane za wyspecjalizowane rozwiązanie, ponieważ gdy chcesz użyć wiersza polecenia, a nie interfejsu witryny GitHub, a masz lokalnego klona, ​​który również chcesz zaktualizować. Dziękujemy za podkreślenie tego rozróżnienia i wyjaśnienie, że ta odpowiedź dotyczy konkretnego przypadku, a nie ogólnego rozwiązania.
SherylHohman
Problem polega na tym, że github wiąże funkcje z gałęziami. Spróbuj zmienić nazwę master na main, a instrukcje się nie powiodą.
gman
-1

Następujące polecenia zmieniają nazwę gałęzi lokalnie, usuwają starą gałąź w lokalizacji zdalnej i pchają nową gałąź, ustawiając gałąź lokalną do śledzenia nowego pilota:

git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch
Pooja Mane
źródło
Chociaż fragment kodu może rozwiązać problem, należy opisać, jaki jest cel kodu (jak rozwiązuje problem). Ponadto możesz sprawdzić stackoverflow.com/help/how-to-answer
Ahmad F
ta odpowiedź obejmuje git not github
gman
-1

To takie proste . Aby zmienić nazwę gałęzi git lokalnie i zdalnie, użyj tego fragmentu kodu (przetestowanego i działa jak urok):

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

Wyjaśnienie:

  1. Zmień nazwę kroku:

    Git Reference: Z opcją -m lub -M zostanie zmieniona nazwa na. Jeśli miał odpowiedni dziennik rejestrowania, jego nazwa jest dopasowywana, a pozycja dziennika rejestrowania jest tworzona w celu zapamiętania zmiany nazwy oddziału. Jeśli istnieje, należy użyć opcji -M, aby wymusić zmianę nazwy.

  2. Usuń krok:

    Referencje Git: git push origin: eksperymentalna Znajdź referencję pasującą do eksperymentalnej w repozytorium źródłowym (np. Referencje / głowice / eksperymentalne) i usuń ją.

  3. Aktualizacja na etapie zdalnego repozytorium (odniesienie do śledzenia w celu śledzenia):

    Odwołanie do git : --set-upstream Dla każdej gałęzi, która jest aktualna lub pomyślnie wypchnięta, dodaj odwołanie upstream (śledzące), używane przez bez argumentów git-pull [1] i inne polecenia. Aby uzyskać więcej informacji, zobacz branch..merge w git-config [1].

avivamg
źródło
ta odpowiedź obejmuje git not github
gman
-1

3 proste kroki

  • git push head origin

  • git gałąź -m stara-nazwa-gałęzi nowa-nazwa-gałęzi

  • git push head origin

Martin Mungai
źródło
ta odpowiedź obejmuje git not github
gman
-1

Na gałęzi git uruchom git gałąź -m stara_nazwa nowa_nazwa To zmodyfikuje nazwę gałęzi na lokalnym repozytorium git push origin: stara_nazwa nowa_nazwa Spowoduje to wypchnięcie zmodyfikowanej nazwy do zdalnego i usunie starą gałąź git push origin -u nowa_nazwa Ustawia lokalną gałąź do śledzenia oddział zdalny. To rozwiązuje problem

Papież Franciszek
źródło
ta odpowiedź obejmuje git not github
gman