Jak zmienić nazwę lokalnego oddziału Git?

Odpowiedzi:

13730

Jeśli chcesz zmienić nazwę gałęzi, wskazując dowolną gałąź, wykonaj:

git branch -m <oldname> <newname>

Jeśli chcesz zmienić nazwę bieżącego oddziału, możesz:

git branch -m <newname>

Sposób, aby to zapamiętać, to -m„przenieś” (lub mv), czyli jak zmieniasz nazwy plików. Dodanie aliasu może również pomóc. Aby to zrobić, uruchom następujące polecenie:

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

Jeśli korzystasz z systemu Windows lub innego systemu plików bez rozróżniania wielkości liter, a nazwa zawiera tylko zmiany wielkich liter, musisz użyć -M, w przeciwnym razie git wyrzuci gałąź już istnieje błąd:

git branch -M <newname>
siride
źródło
87
Naprawdę chciałem wiedzieć, czy to będzie miało wpływ na zdalną gałąź, kiedy / jeśli naciskasz
PandaWood
181
@ PandaWood: doda nowy oddział po naciśnięciu, ale nie usunie starej gałęzi. Jeśli użyjesz git push -f --mirror, zmieni nazwę gałęzi na pilocie, ale powinieneś użyć tej metody tylko wtedy, gdy pilot ma być kopią bieżącego repozytorium. Zobacz także to pytanie: stackoverflow.com/questions/1526794/git-rename-remote-branch
siride
19
@PandaWood, zależy to od push.defaultkonfiguracji. Domyślnie ( matching) przesyła do pilota, którego nazwa pasuje. Musisz to zrobić git push origin <newname>:<oldname>lub utworzysz nowy oddział zdalny. Jeśli jednak push.defaultjest ustawiony na upstream, możesz push origin headi wszystko pójdzie do starej nazwy na pilocie.
Erin Stanfill
13
@ NightOwl888: -m prawdopodobnie jest skrótem od „move”, zgodnie z konwencją uniksową dotyczącą używania mvdo zmiany nazw plików. Powodem tego jest to, że przenoszenie i zmiana nazwy w systemie plików i-węzłów opartym na katalogu są całkowicie równoważne.
siride
51
Długa nazwa -mopcji to --movenp. Zmiana git branch --move masternazwy bieżącej gałęzi na „master”.
robenkleene
445
git branch -m old_branch_name new_branch_name

Powyższe polecenie zmieni nazwę gałęzi, ale musisz być bardzo ostrożny, używając gałęzi o zmienionej nazwie, ponieważ nadal będzie ona odnosić się do starej gałęzi powiązanej z nią, jeśli taka istnieje.

Jeśli chcesz wprowadzić zmiany w master po zmianie nazwy oddziału lokalnego na new_branch_name (przykładowa nazwa):

git push origin new_branch_name:master (teraz zmiany przejdą do oddziału głównego, ale nazwa lokalnego oddziału to nowa_nazwa_gałęzi)

Aby uzyskać więcej informacji, zobacz „ Jak zmienić nazwę lokalnej nazwy oddziału w Git ”.

Madhan Ayyasamy
źródło
326

Aby zmienić nazwę bieżącego oddziału:

git branch -m <newname>
Jonathan
źródło
159
Będziesz musiał użyć -M, aby zmienić nazwę, jeśli zmieniasz tylko wielkie litery, ponieważ git powie ci, że gałąź już istnieje.
cjspurgeon
288

Oto kroki, aby zmienić nazwę oddziału:

  1. Przejdź do gałęzi, której nazwę należy zmienić
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

EDYCJA (12.01.2017): Upewnij się, że uruchomiłeś komendę git statusi sprawdź, czy nowo utworzona gałąź wskazuje swój własny ref, a nie starszy. Jeśli znajdziesz odniesienie do starszej gałęzi, musisz rozbroić upstream, używając:

git branch --unset-upstream
Milind Anantwar
źródło
1
W którym etapie należy rozbroić górę? Przed krokiem 4?
Cyclonecode
1
To najlepsza odpowiedź tutaj, ponieważ opisuje pełny proces poprawnego zmiany nazwy
Chris Halcrow
212

Zmień nazwę gałęzi, będzie przydatna po zakończeniu gałęzi. Potem nadchodzą nowe rzeczy i chcesz rozwijać się w tej samej gałęzi, zamiast ją usuwać i tworzyć nową.

Z mojego doświadczenia wynika, że ​​aby zmienić nazwę lokalnego i zdalnego oddziału w Git, wykonaj następujące czynności.

Cytowanie z wielu stanów - zmień nazwę lokalnego i zdalnego oddziału w git

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

git push origin -u new-name
trungk18
źródło
1
Ten działał dla mnie lepiej. Tutaj 2 kroki dały mi następujące błędy: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
Masz problem podczas uruchamiania polecenia, git push origin :old-name new-nameprawda?
trungk18
Tak, dokładnie (przepraszam, miałem na myśli „drugi krok”, a nie „2 kroki” - zmęczony)
Anto
116

Odpowiedzi do tej pory były prawidłowe, ale oto kilka dodatkowych informacji:

Można bezpiecznie zmienić nazwę gałęzi za pomocą „-m” (ruch), ale trzeba uważać na „-M”, ponieważ wymusza zmianę nazwy, nawet jeśli istnieje już gałąź o tej samej nazwie. Oto fragment strony podręcznika „git-branch”:

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

Vanchev
źródło
2
Co stanie się z zastąpioną gałęzią?
Kevin Dice
Zostaje zastąpione nową nazwą / gałęzią. Na przykład, jeśli masz następujące gałęzie w git: master b1 <- bieżąca gałąź b2 po wykonaniu „git gałąź -M b2” będziesz mieć tylko: master b2 <- obecna gałąź b1 zniknie i jeśli chcesz odzyskaj go, powinieneś to sprawdzić po hash. Możesz to zobaczyć, wpisując „git reflog”. Twoje zdrowie.
Vanchev
-MFlaga jest również przydatna w celu wymuszenia zmiany nazwy, jeśli tylko sprostowanie sprawę nazwy oddziału, np zmienia myBranchsię MyBranch. (Z -mgit powraca fatal: A branch named 'MyBranch' already exists.)
Jon Schneider
92

1. Zmień nazwę

Jeśli to twoja obecna gałąź, po prostu zrób

git branch -m new_name

Jeśli jest to inna gałąź, której nazwę chcesz zmienić

git branch -m old_name new_name

2. Śledź nową zdalną gałąź

- Jeśli twoja gałąź została wypchnięta, to po zmianie nazwy musisz usunąć ją ze zdalnego repozytorium Git i poprosić nowego lokalnego o śledzenie nowej zdalnej gałęzi:

git push origin :old_name
git push --set-upstream origin new_name
Oss
źródło
74

Głupio nazwałem gałąź zaczynającą się od łącznika, a potem sprawdziłem mistrza. Nie chciałem usuwać mojego oddziału, miałem w nim pracę.

Żaden z nich nie działał:

git checkout -dumb-name

git checkout -- -dumb-name

"s, 's i \s też nie pomogły. git branch -mnie działa

Oto jak w końcu to naprawiłem. Przejdź do .git / refs / heads swojej kopii roboczej, znajdź nazwę pliku „-dumb-name”, uzyskaj skrót gałęzi. Następnie to sprawdzi, utworzy nową gałąź o zdrowej nazwie i usunie starą.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name
Samuel Meacham
źródło
8
Czy nie możesz po prostu zmienić nazwy pliku w refs / heads?
android.weasel
Tak samo. Jeśli musisz zagłębić się w strukturę katalogów, aby wykonać tę magię, przejdź całą drogę i zrób „mv - -dumb-name brilliant-name” Zrób „gałąź git -av”, a zobaczysz strukturę katalogów .git / refs. A może „grep -R ^ .git / refs”, aby zobaczyć skróty bezpośrednio.
Dave X
2
Prawdopodobnie mogłeś użyćreflog
Code Whisperer
Szczerze mówiąc, jeśli jest to trasa, którą chciałbyś wybrać, uniknęłbym (mylącego i potencjalnie niebezpiecznego, jeśli nie wiesz, co robisz) IMO w katalogu .git, i po prostu zrób to z niektórymi normalne polecenia z pewną analizą „git log” (używając odpowiednich flag, aby pokazać gałęzie i dowiedzieć się, z którego shasum chcesz pobrać nową gałąź), a następnie zrób to. Następnie usuń gałąź o nazwie wonky. I gardzić że git podkreśla, że trzeba zrozumieć wszystkich swoich wewnętrznych mechanizmów, aby zrobić kilka rzeczy, ale bardzo wdzięczni, że mogą robić takie rzeczy.
Jon V
W wersji 2.10.1+ trudniej jest utworzyć gałąź o złej nazwie. Jeśli to zrobisz, możesz użyć git branch -v, aby uzyskać krótką wersję skrótu swoich gałęzi (dodaj -r dla zdalnego). Następnie możesz użyć git rev-parsować <skróty>, aby uzyskać pełny skrót, jeśli go potrzebujesz.
House of Dexter,
67

Aby zmienić nazwę oddziału lokalnie:

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

Teraz będziesz musiał propagować te zmiany również na zdalnym serwerze.

Aby przekazać zmiany usuniętej starej gałęzi:

git push origin :[old-branch]

Aby przesunąć zmiany w tworzeniu nowego oddziału:

git push origin [new-branch]
aliasav
źródło
57

Tylko trzy kroki do replikacji zmiany nazwy remotena GitHub:

Krok 1 git branch -m old_branchname new_branchname

Krok 2 git push origin :old_branchname new_branchname

Krok 3 git push --set-upstream origin new_branchname

Harry_pb
źródło
2
Musiałem też zrobić jedną dodatkową rzecz: o git push --set-upstream origin new_branchnamektórej wspomniano w odpowiedzi na
@Nomade
2
Krok 3 nie jest potrzebny. Wszystko było aktualne po kroku 2.
Dev
@ Dev nie we wszystkich przypadkach Dev, musiałem ostatnio zaktualizować, ponieważ używam bitbucket i codecommit, krok 3 jest konieczny
Harry_pb
40

Zmień nazwę gałęzi za pomocą tego polecenia:

git branch -m [old_branch_name] [new_branch_name]

-m: Zmienia nazwę / przenosi gałąź. Jeśli istnieje już gałąź, pojawi się błąd.

Jeśli istnieje już gałąź i chcesz zmienić nazwę tej gałęzi, użyj:

 git rename -M [old_branch_name] [new_branch_name]

Aby uzyskać więcej informacji o pomocy, użyj tego polecenia w terminalu:

git branch --help

lub

man git branch
Hafiz Shehbaz Ali
źródło
40

Zaawansowani użytkownicy Git mogą zmieniać nazwę ręcznie, używając:

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
Jethik
źródło
34
  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
  1. Usuń gałąź zdalną o starej nazwie i wciśnij gałąź lokalną o nowej nazwie.

git push origin :old-name new-name

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

git push origin -u new-name

Aby szybko to zrobić, możesz wykonać następujące 3 kroki:

# Zmień nazwę oddziału lokalnie

git branch -m old_branch new_branch  

# Usuń starą gałąź zdalną

git push origin :old_branch  

# Wciśnij nowy oddział, ustaw oddział lokalny, aby śledził nowego pilota

git push --set-upstream origin new_branch   

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

badarshahzad
źródło
to działa dla mnie
Vazgen Manukyan
26

Oto trzy kroki: Polecenie, które możesz wywołać w swoim terminalu i zmienić nazwę oddziału.

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 więcej: krok po kroku, jak zmienić nazwę oddziału Git to dobry artykuł na ten temat.

Hazarapet Tunanyan
źródło
25

Prawdopodobnie, jak wspominają inni, będzie to przypadek niedopasowania nazw gałęzi.

Jeśli masz taką sytuację, domyślam się, że korzystasz z systemu Windows, co doprowadzi Cię również do:

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

Następnie musisz zrobić krok pośredni:

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

Nic więcej.

P4C
źródło
1
Należy pamiętać, że taka sytuacja może również wystąpić na komputerze Mac, który również (wyjątkowo irytująco) nie rozróżnia wielkości liter w swoim systemie plików.
Jon V
Alternatywnie możesz użyć -Mzamiast -mtego rodzaju zmiany nazwy „naprawy obudowy” w jednym kroku.
Jon Schneider
23

Próbuję odpowiedzieć konkretnie na pytanie (przynajmniej tytuł).

Możesz także zmienić nazwę oddziału lokalnego , ale nadal śledzi starą nazwę na pilocie.

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

Teraz po uruchomieniu git pushzdalny old_branchref jest aktualizowany o lokalny new_branch.

Musisz znać i zapamiętać tę konfigurację. Ale może być przydatny, jeśli nie masz wyboru nazwy oddziału zdalnego, ale nie podoba ci się (och, mam na myśli, że masz bardzo dobry powód, aby jej nie lubić!) I wolisz jaśniejsze nazwa lokalnego oddziału.

Grając z konfiguracją pobierania, możesz nawet zmienić nazwę lokalnego zdalnego odwołania. tzn. posiadanie refs/remote/origin/new_branchwskaźnika ref do gałęzi, to w rzeczywistości jest old_branchon origin. Odradzam to jednak dla bezpieczeństwa twojego umysłu.

Pierre-Olivier Vares
źródło
22

Lokalna zmiana oddziału jest dość łatwa ...

Jeśli jesteś w oddziale, dla którego chcesz zmienić nazwę, po prostu wykonaj następujące czynności:

git branch -m my_new_branch

W przeciwnym razie, jeśli jesteś masterlub jakikolwiek inny oddział inny niż ten, który chcesz zmienić nazwę, po prostu zrobić:

git branch -m my_old_branch my_new_branch

Ponadto tworzę obraz poniżej, aby pokazać to w akcji w wierszu polecenia . W tym przypadku jesteś na masteroddziale, na przykład:

Zmień nazwę oddziału lokalnie

Alireza
źródło
21

Jeśli chcesz korzystać z SourceTree (co zdecydowanie polecam), możesz kliknąć prawym przyciskiem myszy oddział i wybrać „Zmień nazwę”.

wprowadź opis zdjęcia tutaj

Marcin Szymczak
źródło
20

Aby zmienić nazwę bieżącej gałęzi (z wyjątkiem odłączonego stanu HEAD), możesz również użyć tego aliasu:

[alias]
    mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'
dentuzhik
źródło
18

Inną opcją jest w ogóle nie używanie wiersza poleceń. Klienci Git GUI, tacy jak SourceTree, usuwają wiele składniowej krzywej uczenia się / bólu, który powoduje, że pytania takie jak ta należą do najczęściej oglądanych w przepełnieniu stosu.

W SourceTree kliknij prawym przyciskiem myszy dowolną lokalną gałąź w panelu „Gałęzie” po lewej stronie i wybierz „Zmień nazwę ...”.

Steve Chambers
źródło
5
Nie nazwałbym tego bólem. Polecenie git jest bardzo łatwe w użyciu, gdy zobaczysz tę odpowiedź, prawdopodobnie już nigdy nie wrócisz. Problem polega na tym, że - jak się wydaje - dokumentacja wiersza polecenia git nie jest wystarczająco intuicyjna.
Nearoo
1
To prawda, ale dzięki SourceTree prawie nigdy nie muszę się martwić sprawdzaniem dokumentacji. Wszystko jest ogólnie intuicyjne - wystarczy kliknąć prawym przyciskiem myszy i zobaczyć, jakie są opcje. (BTW nie jestem z nimi związany w żaden sposób - tak jak narzędzie!)
Steve Chambers
17

Prosty sposób to zrobić:

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

Aby uzyskać więcej informacji, zobacz to .

Nomade
źródło
15

Ponieważ nie chcesz wypychać gałęzi na zdalny serwer, ten przykład będzie przydatny:

Załóżmy, że masz istniejącą gałąź o nazwie „my-hot-feature” i chcesz zmienić jej nazwę na „feature-15”.

Po pierwsze, chcesz zmienić swój lokalny oddział. To nie może być prostsze:

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

Aby uzyskać więcej informacji, możesz odwiedzić Lokalną i zdalną zmianę nazwy oddziału w Git .

Tana
źródło
13

Wersja Git 2.9.2

Jeśli chcesz zmienić nazwę lokalnego oddziału, w którym się znajdujesz:

git branch -m new_name

Jeśli chcesz zmienić nazwę innego oddziału:

git branch -m old_name new_name

Jeśli chcesz zmienić nazwę innej gałęzi na nazwę, która już istnieje:

git branch -M old_name new_name_that_already_exists

Uwaga: Ostatnie polecenie jest destrukcyjne i zmieni nazwę twojej gałęzi, ale utracisz starą gałąź o tej nazwie i tych zatwierdzeniach, ponieważ nazwy gałęzi muszą być unikalne.

nikkypx
źródło
11

Jeśli chcesz zmienić nazwę bieżącego oddziału, uruchom:

git branch -m [old_branch] [new_branch]

Jeśli chcesz usunąć starą gałąź zdalną, uruchom:

git push origin :[old_branch]

Jeśli chcesz usunąć starą gałąź zdalną i utworzyć nową gałąź zdalną, uruchom:

git push origin :old_branch new_branch
Arif
źródło
6

Zmiana nazwy oddziału Git może być wykonana przy użyciu:

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

Różnica między -m a -M :

-m: jeśli próbujesz zmienić nazwę gałęzi na istniejącą nazwę gałęzi, używając -m . Pojawi się błąd informujący, że gałąź już istnieje. Musisz podać unikalną nazwę.

Ale,

-M: pomoże ci to wymusić zmianę nazwy na dane imię, nawet jeśli istnieje. Tak więc istniejący oddział nadpisze go całkowicie ...

Oto przykład terminala 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$
Mohideen bin Mohammed
źródło
5

Dla użytkowników Git GUI nie może to być prostsze. W Git GUI wybierz nazwę gałęzi z rozwijanej listy w oknie dialogowym „Zmień nazwę gałęzi” utworzonej z pozycji menu Gałąź: Zmień nazwę, wpisz nową nazwę i kliknij „Zmień nazwę”. Podkreśliłem, gdzie znaleźć rozwijaną listę.

Zmień nazwę lokalnego oddziału Git

Ivan
źródło
3

Jeśli chcesz:

  • Zmień nazwę repozytorium Git, uruchom: git branch -m <oldname> <newname>
  • Usuń stary oddział przez: git push origin: old-name new-name
  • Zatwierdź za pomocą: git commit <newname>
    • a następnie wypychaj za pomocą: git push origin new_branch_name:master
  • Jeśli chcesz sprawdzić status, użyj: git status
  • Jeśli chcesz się sprawdzić, użyj: git checkout
Vineet Jain
źródło
3

Wszystkie poprzednie odpowiedzi mówią git branch -m. Oczywiście jest łatwy w obsłudze, ale dla mnie może być trochę trudno zapamiętać kolejne polecenie Git. Próbowałem więc wykonać pracę za pomocą polecenia, które znałem. Tak, możesz się domyślić.

Używam git branch -b <new_branch_name>. A jeśli nie chcesz teraz zapisywać starej gałęzi, możesz ją wykonać, git branch -D <old_branch_name>aby ją usunąć.

Wiem, że to może być trochę nudne, ale łatwiej to zrozumieć i zapamiętać. Mam nadzieję, że ci się przyda.

Dai Kaixian
źródło
Jeśli masz problemy z zapamiętywaniem poleceń, możesz dla siebie skonfigurować aliasy powłoki lub git.
sean
co jeśli potrzebuję uruchomić polecenie na tak wielu różnych komputerach?
Dai Kaixian
1

W PhpStorm:

VCS → Git → Oddziały ... → Lokalne oddziały → _twoja_gałęza_ → Zmień nazwę

AlexSi
źródło
0

Wszystko, co musisz zrobić, to trzy kroki:

  1. Podaj starą gałąź pod .git / refs / heads nową nazwą
  2. Podaj starą gałąź pod .git / logs / refs / heads nową nazwą
  3. Zaktualizuj .git / HEAD, aby prowadzić do nowej nazwy oddziału

źródło