Як перейменувати локальну гілку Git?


8570

Я не хочу перейменовувати віддалену гілку, як описано в Перейменувати головну гілку як для локальних, так і віддалених сховищ Git .

Як я можу перейменувати локальну гілку, яку не було висунуто у віддалену гілку?

Якщо вам також потрібно перейменувати віддалену гілку:
Як я перейменую як локальну, так і назву віддаленої гілки Git

Відповіді:


13731

Якщо ви хочете перейменувати гілку, вказавши на будь-яку гілку, зробіть:

git branch -m <oldname> <newname>

Якщо ви хочете перейменувати поточну гілку, ви можете зробити:

git branch -m <newname>

Спосіб запам'ятати це -mдля "переміщення" (або mv), тобто перейменування файлів. Додавання псевдоніма також може допомогти. Для цього виконайте такі дії:

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

Якщо ви перебуваєте в Windows або іншій нечутливій до регістру файловій системі, і в назві є лише зміни великої літери, вам потрібно скористатися -M, інакше git викине гілку вже існує помилка:

git branch -M <newname>

87
Мені дуже хотілося знати, чи це обов'язково вплине на віддалену гілку, коли / якщо ви натиснете
PandaWood

181
@PandaWood: вона додасть нову гілку при натисканні, але не видалить стару гілку. Якщо ви використовуєте git push -f --mirror, то він буде перейменовувати гілку на віддалений, але використовувати цей метод слід лише в тому випадку, якщо віддалений просто буде копією вашого поточного сховища. Дивіться також питання: stackoverflow.com/questions/1526794/git-rename-remote-branch
siride

19
@PandaWood, це залежить від push.defaultналаштування. За замовчуванням ( matching) він натисне на пульт, ім'я якого відповідає. Вам доведеться зробити git push origin <newname>:<oldname>або ви створите нову віддалену гілку. Однак якщо push.defaultвстановлено значення upstream, ви можете, push origin headі все перейде до старого імені на пульті.
Ерін Стенфілл

13
@ NightOwl888: -m, ймовірно, короткий для "переміщення", дотримуючись конвенції Unix про використання mvперейменування файлів. Причиною цього є те, що переміщення та перейменування у файловій системі inode на базі каталогів повністю еквівалентні.
siride

51
Довге ім'я -mопції --move, наприклад, git branch --move masterперейменовує поточну гілку, яку слід назвати "master".
robenkleene

445
git branch -m old_branch_name new_branch_name

Вищенаведена команда змінить назву вашої гілки, але вам потрібно бути дуже обережним, використовуючи перейменовану гілку, оскільки вона все одно буде посилатися на стару гілку вгору, що пов'язана з нею, якщо така є.

Якщо ви хочете внести деякі зміни до головного, після того як ваша локальна філія буде перейменована в new_branch_name (приклад назва):

git push origin new_branch_name:master (тепер зміни перейдуть до головної гілки, але назва вашої місцевої гілки - нове_бранство)

Детальніше див. У розділі " Як перейменувати назву місцевої філії в Git ."


326

Щоб перейменувати поточну галузь:

git branch -m <newname>

159
Вам потрібно буде використовувати -M для перейменування, якщо ви змінюєте лише великі літери, оскільки git скаже вам, що гілка вже існує.
cjspurgeon

288

Ось етапи перейменування гілки:

  1. Перейдіть до гілки, яку потрібно перейменувати
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

EDIT (01.12.2017): Переконайтеся, що ви запускаєте команду git statusі переконайтеся, що новостворена гілка вказує на власний номер, а не на старіший. Якщо ви знайдете посилання на старішу гілку, вам потрібно зняти верхній потік, використовуючи:

git branch --unset-upstream

1
На якому кроці можна було б зняти верхню течію? Перед кроком 4?
Cyclonecode

1
Тут найкраща відповідь, оскільки він описує повний процес правильного завершення перейменування
Кріс Халкроу

212

Перейменування гілки стане корисним після завершення роботи вашої філії. Потім надходять нові речі, і ви хочете розвиватися в тій самій гілці, а не видаляти її та створювати нову.

З мого досвіду, щоб перейменувати локальну та віддалену гілку в Git, слід виконати наступні кроки.

Цитування з кількох держав - Перейменуйте локальну та віддалену гілку в git

1. Перейменуйте місцеве відділення

Якщо ви знаходитесь у відділенні, ви хочете перейменувати:

git branch -m new-name

Якщо ви перебуваєте в іншій галузі:

git branch -m old-name new-name

2. Видаліть віддалену гілку старої назви та натисніть локальну гілку нової назви

git push origin :old-name new-name

3. Скиньте гілку вище за течією для нової локальної гілки

git push origin -u new-name

1
Цей краще працював для мене. Тут два кроки дали мені такі помилки: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'
Анто

1
У вас виникла проблема під час виконання команди git push origin :old-name new-nameправильно?
trungk18

Так точно (вибачте, що я мав на увазі "2-й крок", а не "2 кроки" - втомився)
Анто

116

На сьогодні відповіді були правильними, але ось додаткова інформація:

Можна сміливо перейменувати гілку на '-m' (переміщення), але треба бути обережним з '-M', оскільки воно змушує перейменувати, навіть якщо вже існує гілка з такою ж назвою. Ось уривок зі сторінки "git-branch":

З опцією -m або -M <oldbranch>буде перейменовано на <newbranch>. Якщо <oldbranch>був відповідний рефлог, він перейменовується на збіг <newbranch>, і створюється запис рефлогу, щоб запам'ятати перейменування гілки. Якщо <newbranch>існує, -M необхідно використовувати, щоб змусити відбутися перейменування.


2
Що відбувається з переписаною гілкою?
Кевін Діс

Це перезаписано новою назвою / гілкою. Наприклад, якщо у вас є такі гілки в git: master b1 <- поточна гілка b2 після того, як ви зробите 'git гілка -M b2', у вас буде тільки: master b2 <- поточна гілка b1 піде, і якщо ви захочете відновити його, ви повинні перевірити його хеш. Ви можете побачити це, ввівши "git reflog". Ура.
Ванчев

-MПрапор також корисно , щоб змусити перейменувати , якщо ви тільки виправляючи випадок імені гілки, наприклад , зміни myBranchв MyBranch. (З -m, git return fatal: A branch named 'MyBranch' already exists.)
Джон Шнайдер

92

1. Перейменуйте

Якщо це ваша нинішня філія, просто зробіть

git branch -m new_name

Якщо це інша гілка, яку потрібно перейменувати

git branch -m old_name new_name

2. Відстежте нову віддалену гілку

- Якщо ваша філія була висунута, після її перейменування потрібно видалити її з віддаленого сховища Git і попросити ваш новий локальний відстежити нову віддалену гілку:

git push origin :old_name
git push --set-upstream origin new_name

74

Я нерозумно назвав гілку, починаючи з дефісу, а потім перевірив майстра. Я не хотів видаляти свою гілку, я працював у ній.

Жоден із них не працював:

git checkout -dumb-name

git checkout -- -dumb-name

"s, 's та \s теж не допомогли. git branch -mне працює.

Ось як я остаточно це виправив. Зайдіть у .git / refs / heads вашої робочої копії, знайдіть ім'я файлу "-dumb-name", отримайте хеш гілки. Потім це перевірить, зробить нову гілку зі здоровим іменем та видалить стару.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name

8
Не могли ви просто перейменувати файл у refs / heads?
android.weasel

Дітто. Якщо вам доведеться зануритися в структуру каталогів, щоб зробити цю магію, пройдіть увесь шлях і зробіть 'mv - -dumb-name брилі-ім'я' Зробити 'гілку гіт -av', і ви побачите структуру каталогу .git / refs. А може бути, 'grep -R ^ .git / refs', щоб переглядати хеші безпосередньо.
Дейв X

2
Можливо, ви могли б скористатисяreflog
Code Whisperer

Чесно кажучи, якщо це маршрут, який ви хотіли пройти, я б уникнув (IMO заплутаний і потенційно небезпечний, якщо ви не знаєте, що ви робите), в першу чергу пройти через каталог .git, а просто зробити це з деякими звичайні команди з деяким розбором "журналу git" (використовуючи відповідні прапори для показу гілок та з'ясувати, з якого шасума ви хочете перевірити нову гілку), а потім виконайте це. Потім вийміть гілку з ім'ям Вінк. Я зневажаю, що git наполягає на тому, що вам потрібно зрозуміти всю його внутрішню роботу, щоб зробити якісь речі, але дуже ціную, що ви можете робити це.
Джон V

Складніше створити гілку з неправильним іменем у 2.10.1+. Якщо ви так чи інакше це зробите, ви можете використовувати git гілку -v, щоб отримати коротку хеш-версію ваших гілок (додайте -r для віддалених). Потім ви можете використовувати git rev-parse <shorthash>, щоб отримати повний хеш, якщо він вам потрібен.
Дім Декстера

67

Щоб перейменувати гілку локально:

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

Тепер вам доведеться поширювати ці зміни також на віддаленому сервері.

Щоб натиснути зміни видаленої старої гілки:

git push origin :[old-branch]

Щоб змінити створення нової гілки:

git push origin [new-branch]

57

Всього три кроки, щоб повторити зміну імені remote, а також на GitHub:

Крок 1 git branch -m old_branchname new_branchname

Крок 2 git push origin :old_branchname new_branchname

Крок 3 git push --set-upstream origin new_branchname


2
Я також повинен був зробити одну додаткову річ: про git push --set-upstream origin new_branchnameщо йдеться у відповіді
@Nomade

2
Крок 3 не потрібен. Все було актуальним після кроку 2.
Дев.

@Дев не у всіх випадках Dev, мені довелося нещодавно оновити, оскільки використовую бітбукет і кодекміт, необхідний крок 3
Harry_pb

40

Перейменуйте гілку за допомогою цієї команди:

git branch -m [old_branch_name] [new_branch_name]

-m: Перейменує / переміщує гілку. Якщо філія вже є, ви отримаєте помилку.

Якщо філія вже є і ви хочете перейменувати її, скористайтеся:

 git rename -M [old_branch_name] [new_branch_name]

Для отримання додаткової інформації про довідку скористайтеся цією командою в терміналі:

git branch --help

або

man git branch

40

Користувачі розширеного Git можуть перейменовувати вручну за допомогою:

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

34
  1. Перейменуйте місцеве відділення.

Якщо ви знаходитесь у відділенні, ви хочете перейменувати:

git branch -m new-name

Якщо ви перебуваєте в іншій галузі:

git branch -m old-name new-name
  1. Видаліть віддалену гілку старої назви та натисніть локальну гілку нової назви.

git push origin :old-name new-name

  1. Скиньте гілку вище за течією для нової локальної гілки. Перейдіть на відділення, а потім:

git push origin -u new-name

Або для швидкого способу зробити це, ви можете скористатися цими 3 кроками:

# Перейменувати гілку на місцевому рівні

git branch -m old_branch new_branch  

# Видаліть стару віддалену гілку

git push origin :old_branch  

# Натисніть нову гілку, встановіть локальну гілку для відстеження нового пульта

git push --set-upstream origin new_branch   

Референція: https://www.w3docs.com/snippets/git/how-to-rename-git-local-and-remote-branches.html


це працює для мене
Вазген Манукян

26

Ось три кроки: Команда, яку ви можете зателефонувати всередину свого терміналу та змінити назву відділення.

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

Якщо вам потрібно більше: крок за кроком, як змінити назву гілки гіт - це хороша стаття про це.


25

Можливо, як зазначають інші, це буде невідповідністю випадку іменування галузей.

Якщо у вас є така ситуація, я можу здогадатися, що ви перебуваєте в Windows, що також призведе до:

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

Тоді вам потрібно зробити проміжний крок:

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

Нічого більше.


1
Зауважте, що така ситуація може виникнути і на Mac, що також (у надзвичайно прикрому випадку) нечутливий у своїй файловій системі.
Джон V

Крім того, ви можете використовувати -Mзамість того, -mщоб робити таке перейменування "обстановки кожуха" за один крок.
Джон Шнайдер

23

Намагаються відповісти конкретно на запитання (принаймні заголовок).

Ви також можете перейменувати місцеву гілку, але вона продовжує відстежувати стару назву на пульті.

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

Тепер, коли ви запустите git push, віддалений номер old_branchоновиться до вашого місцевого new_branch.

Ви повинні знати та запам'ятати цю конфігурацію. Але це може бути корисно, якщо у вас немає вибору назви віддаленої гілки, але вам це не подобається (о, я маю на увазі, у вас дуже хороший причина не сподобатися!) І ви віддаєте перевагу більш чітке. назва вашої місцевої філії.

Граючи з конфігурацією вибору, ви навіть можете перейменовувати локальну віддалену посилання. тобто, що має refs/remote/origin/new_branchвказівник ref на гілку, тобто насправді old_branchна origin. Однак, я дуже заважаю цьому заради безпеки вашого розуму.


22

Зміна гілки локально досить просто ...

Якщо ви знаходитесь у відділенні, для якого хочете змінити назву, просто зробіть це:

git branch -m my_new_branch

В іншому випадку, якщо ви перебуваєте на masterабо який - або іншої галузі , крім того, ви хотіли б змінити назву, просто зробити:

git branch -m my_old_branch my_new_branch

Також я створюю зображення нижче, щоб показати це в дії в командному рядку . У цьому випадку ви знаходитесь у masterвідділенні, наприклад:

Змініть назву філії локально


21

Якщо ви бажаєте скористатися SourceTree (що я настійно рекомендую), ви можете клацнути правою кнопкою миші вашу філію та обрати "Перейменувати".

введіть тут опис зображення


20

Для перейменування поточної гілки (за винятком окремого стану HEAD) ви також можете використовувати цей псевдонім:

[alias]
    mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'

18

Інший варіант - взагалі не використовувати командний рядок. Клієнти графічного інтерфейсу Git, такі як SourceTree забирають значну частину синтаксичної кривої навчання / болю, що спричиняє такі питання, як цей, який є одним із найбільш переглянутих на стеку Overflow.

У SourceTree клацніть правою кнопкою миші на будь-якій локальній гілці в області "Гілки" зліва та виберіть "Перейменувати ...".


5
Я б не назвав це болем. Команда git дуже проста у використанні, щойно побачивши цю відповідь, ви, ймовірно, більше ніколи не повернетесь. Проблема полягає в тому, що документація командного рядка git недостатньо інтуїтивно зрозуміла.
Неару

1
Правда, але з SourceTree мені навряд чи потрібно хвилюватися щодо перевірки документації. Все, як правило, інтуїтивно - просто клацніть правою кнопкою миші та подивіться, які варіанти. (До речі, я жодним чином не пов'язаний з ними - як інструмент!)
Стів Чемберс

17

Простий спосіб зробити це:

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

Детальніше дивіться у цьому .


15

Оскільки ви не хочете натискати гілку на віддалений сервер, цей приклад буде корисним:

Скажімо, у вас є гілка під назвою "моя-гаряча-особливість", і ви хочете перейменувати її на "особливість-15".

По-перше, ви хочете змінити місцеве відділення. Це не може бути простішим:

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

Для отримання додаткової інформації ви можете відвідати місцеве та віддалене перейменування філії в Git .


13

Версія Git 2.9.2

Якщо ви хочете змінити назву місцевої філії, на якій ви перебуваєте:

git branch -m new_name

Якщо ви хочете змінити назву іншої гілки:

git branch -m old_name new_name

Якщо ви хочете змінити назву іншої гілки на назву, яка вже існує:

git branch -M old_name new_name_that_already_exists

Примітка. Остання команда є руйнівною і перейменовує вашу гілку, але ви втратите стару гілку з цим ім'ям і ці зобов'язання, оскільки назви гілок повинні бути унікальними.


11

Якщо ви хочете змінити назву поточної гілки, запустіть:

git branch -m [old_branch] [new_branch]

Якщо ви хочете видалити стару віддалену гілку, запустіть:

git push origin :[old_branch]

Якщо ви хочете видалити стару віддалену гілку та створити нову віддалену гілку, запустіть:

git push origin :old_branch new_branch

6

Перейменування гілки Git можна виконати за допомогою:

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

Різниця між -m і -M :

-m: якщо ви намагаєтесь перейменувати свою філію в існуючу назву гілки за допомогою -m . Це призведе до помилки, сказавши, що філія вже існує. Вам потрібно дати унікальне ім’я.

Але,

-М: це допоможе вам змусити перейменувати вказане ім’я, навіть воно існує. Тож існуюча гілка буде повністю перезаписана з нею ...

Ось приклад терміналу 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$

5

Для користувачів Git GUI це не може бути набагато простішим. У графічному інтерфейсі Git виберіть ім'я гілки зі спадного списку у діалоговому вікні "Перейменувати гілку", створеному з пункту меню Відділення: Перейменуйте, введіть нове ім'я та натисніть "Перейменувати". Я виділив, де можна знайти спадний список.

Перейменуйте місцеву гілку Git


3

Якщо ти хочеш:

  • Перейменуйте сховище Git, запустіть: git branch -m <oldname> <newname>
  • Видаліть стару гілку: git push origin: old-name new-name
  • Здійсніть це за допомогою: git commit <newname>
    • а потім натисніть, використовуючи: git push origin new_branch_name:master
  • Якщо ви хочете перевірити стан, скористайтеся: git status
  • Якщо ви хочете перевірити, скористайтеся: git checkout

3

Усі попередні відповіді говорять про git branch -m. Звичайно, це легко в експлуатації, але мені може бути трохи важко запам'ятати ще одну команду Git. Тому я намагався виконати роботу командою, з якою я був знайомий. Так, ви можете це здогадатися.

Я використовую git branch -b <new_branch_name>. Якщо ви не хочете зберегти стару гілку, ви можете виконати git branch -D <old_branch_name>її видалення.

Я знаю, це може бути трохи нудно, але це легше зрозуміти і запам'ятати. Я сподіваюся, що це вам корисно.


Якщо у вас виникли проблеми з запам'ятовуванням команд, ви можете встановити псевдоніми shell або git для себе.
sean

що робити, якщо мені потрібно запустити команду на стільки різних машинах?
Дай Кайсян

1

У PhpStorm:

VCS → Git → Відділення ... → Місцеві відділення → _your_branch_ → Перейменувати


0

Все, що вам потрібно зробити - це три кроки:

  1. Дайте старій гілці під .git / refs / head нову назву
  2. Дайте старій гілці під .git / logs / refs / heads нову назву
  3. Оновіть .git / HEAD, щоб перейти до вашої нової назви філії
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.