Как переименовать местную ветку Git?

8574

Я не хочу переименовывать удаленную ветку, как описано в разделе Переименовать основную ветку для локальных и удаленных репозиториев Git .

Как я могу переименовать локальную ветку, которая не была перенесена в удаленную ветку?

Если вам нужно переименовать и удаленную ветку:
Как мне переименовать как локальную, так и удаленную ветку Git?

Форрест
источник

Ответы:

13741

Если вы хотите переименовать ветку, указав на любую ветку, выполните:

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>
siride
источник
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, вероятно, является сокращением от «move», следуя соглашению Unix об использовании mvфайлов для переименования файлов. Причина этого заключается в том, что перемещение и переименование в файловой системе inode на основе каталогов полностью эквивалентны.
Сирида
51
Длинное имя -mопции --move, например, git branch --move masterпереименовывает текущую ветвь в «master».
Робенклин
445
git branch -m old_branch_name new_branch_name

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

Если вы хотите внести некоторые изменения в master после того, как ваша локальная ветка переименована в new_branch_name (пример имени):

git push origin new_branch_name:master (теперь изменения пойдут в основную ветку, но имя вашей локальной ветки - new_branch_name)

Для получения дополнительной информации см. « Как переименовать имя вашей локальной ветки в Git ».

Мадхан Айясами
источник
326

Чтобы переименовать вашу текущую ветку:

git branch -m <newname>
Джонатан
источник
159
Вам нужно будет использовать -M для переименования, если вы меняете только заглавные буквы, поскольку git скажет вам, что ветвь уже существует.
cjspurgeon
289

Вот шаги, чтобы переименовать ветку:

  1. Переключитесь на ветку, которую нужно переименовать
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

РЕДАКТИРОВАТЬ (12/01/2017): Убедитесь, что вы выполнили команду git statusи убедитесь, что вновь созданная ветвь указывает на свою собственную ссылку, а не на старую. Если вы найдете ссылку на более старую ветку, вам нужно удалить восходящий поток, используя:

git branch --unset-upstream
Милинд Анантвар
источник
1
На каком этапе можно было бы отключить восходящий поток? До шага 4?
Циклон-код
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
trungk18
источник
1
Этот работал лучше для меня. Здесь 2 шага дали мне следующие ошибки: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
Вы получили проблему при запуске команды git push origin :old-name new-nameправильно?
trungk18
Да, именно (извините, я имел в виду "2-й шаг", а не "2 шага" - устал)
Anto
116

Ответы до сих пор были правильными, но вот дополнительная информация:

Можно смело переименовывать ветку с помощью «-m» (перемещение), но с «-M» нужно быть осторожнее, потому что оно вызывает переименование, даже если уже существует ветвь с таким именем. Вот выдержка из справочной страницы git-branch:

С опцией -m или -M, <oldbranch>будет переименован в <newbranch>. Если <oldbranch>имеется соответствующий reflog, он переименовывается для соответствия <newbranch>, и создается запись reflog для запоминания переименования ветви. Если <newbranch>существует, -M должен быть использован для принудительного переименования.

Vanchev
источник
2
Что происходит с перезаписанной веткой?
Кевин Дайс
Он перезаписывается новым именем / веткой. Например, если у вас есть следующие ветви в git: master b1 <- текущая ветка b2 после того, как вы выполните 'git branch -M b2', у вас будет только: master b2 <- текущая ветка b1 исчезнет, ​​и если вы хотите восстановить его, вы должны проверить его по хешу. Вы можете увидеть это, набрав «git reflog». Приветствия.
Ванчев
-MФлаг также полезно , чтобы заставить переименовать , если вы только исправляя случай имени ветви, например , изменения myBranchв MyBranch. (С -m, мерзавец возвращается 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
Oss
источник
74

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

Ни один из них не работал:

git checkout -dumb-name

git checkout -- -dumb-name

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

Вот как я наконец исправил это. Зайдите в .git / refs /head вашей рабочей копии, найдите имя файла "-dumb-name", получите хэш ветки. Затем это проверит это, создаст новую ветку с нормальным именем и удалит старую.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name
Самуэль Мичам
источник
8
Не могли бы вы просто переименовать файл в refs /heads?
android.weasel
То же самое. Если вам нужно покопаться в структуре каталогов, чтобы выполнить эту магию, проделайте весь путь и выполните 'mv - -dumb-name brilliant-name'. Выполните 'git branch -av', и вы увидите структуру каталогов: .git / рефов. Или, может быть, 'grep -R ^ .git / refs', чтобы увидеть хэши напрямую.
Дэйв Икс
2
Вы могли бы, вероятно, использоватьreflog
Code Whisperer
Честно говоря, если вы хотите пойти по этому пути, я бы избежал (IMO сбивает с толку и потенциально опасного, если вы не знаете, что делаете), прежде всего, прогуляйтесь по каталогу .git, и просто сделайте это с некоторыми обычные команды с некоторым анализом «git log» (используя соответствующие флаги для отображения веток и выяснения, из какого шасума вы хотите получить новую ветку), а затем выполните это. Затем удалите ветку с именем wonky. Я презираю, что git настаивает на том, что вам нужно понимать все его внутренние действия, чтобы делать какие-то вещи, но очень ценю, что вы можете делать эти вещи.
Jon V
Сложнее создать ветку с плохим именем в 2.10.1+. Если вы так или иначе сделаете это, вы можете использовать git branch -v, чтобы получить краткую версию хеша ваших веток (добавьте -r для удаленного). Затем вы можете использовать git rev-parse <shorthash>, чтобы получить полный хеш, если вам это нужно.
Дом Декстера
67

Чтобы переименовать ветку локально:

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

Теперь вам нужно будет распространить эти изменения и на вашем удаленном сервере.

Чтобы протолкнуть изменения удаленной старой ветки:

git push origin :[old-branch]

Чтобы протолкнуть изменения создания новой ветки:

git push origin [new-branch]
aliasav
источник
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

Harry_pb
источник
2
Я также должен был сделать одну дополнительную вещь: git push --set-upstream origin new_branchnameкоторая упоминается в ответе
@Nomade
2
Шаг 3 не нужен. Все было обновлено после шага 2.
Дев
@Dev не во всех случаях Dev, мне пришлось обновлять недавно, так как с использованием bitbucket и codecommit, шаг 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
Jethik
источник
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

badarshahzad
источник
это работает для меня
Вазген Манукян
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

Если вам нужно больше: шаг за шагом, Хорошая статья об этом - как изменить имя Git Branch .

Хазарапет Тунанян
источник
25

Вероятно, как уже упоминалось другими, это будет несоответствие в именах ветвей.

Если у вас такая ситуация, я могу предположить, что вы работаете в Windows, что также приведет вас к:

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

Затем вы должны сделать промежуточный шаг:

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

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

P4C
источник
1
Обратите внимание, что эта ситуация может также возникнуть на Mac, который также (исключительно раздражает) нечувствителен к регистру в своей файловой системе.
Jon 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указатель реф в отрасли, то есть на самом деле 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'
dentuzhik
источник
18

Другой вариант - вообще не использовать командную строку. Клиенты Git GUI, такие как SourceTree, устраняют большую часть синтаксической кривой обучения / боли, из-за которой такие вопросы, как этот, входят в число самых просматриваемых при переполнении стека.

В SourceTree щелкните правой кнопкой мыши любую локальную ветвь на панели «Ветви» слева и выберите «Переименовать ...».

Стив Чемберс
источник
5
Я бы не назвал это болью. Команда git очень проста в использовании, как только вы увидите этот ответ, вы, вероятно, больше никогда не вернетесь. Проблема в том, что, похоже, документация командной строки git недостаточно интуитивна.
Nearoo
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

Для больше, посмотрите это .

Nomade
источник
15

Поскольку вы не хотите передавать ветку на удаленный сервер, этот пример будет полезен:

Допустим, у вас есть существующая ветка под названием «my-hot-feature», и вы хотите переименовать ее в «feature-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

Примечание: последняя команда деструктивна и переименует вашу ветку, но вы потеряете старую ветку с этим именем и этими коммитами, потому что имена веток должны быть уникальными.

nikkypx
источник
11

Если вы хотите изменить имя текущей ветви, запустите:

git branch -m [old_branch] [new_branch]

Если вы хотите удалить старую удаленную ветку, запустите:

git push origin :[old_branch]

Если вы хотите удалить старую удаленную ветку и создать новую удаленную ветку, выполните:

git push origin :old_branch new_branch
Arif
источник
6

Переименовать ветку Git можно с помощью:

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

Разница между -m и -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>для удаления.

Я знаю, что это может быть немного утомительно, но это легче понять и запомнить. Я надеюсь, что это полезно для вас.

Дай Кайсян
источник
Если у вас возникают проблемы с запоминанием команд, вы можете настроить псевдонимы оболочки или git для себя.
Шон
Что делать, если мне нужно запустить команду на стольких разных машинах?
Дай Кайсян
1

В PhpStorm:

VCS → Git → Филиалы ... → Локальные филиалы → _your_branch_ → Переименовать

AlexSi
источник
0

Все, что вам нужно сделать, это три шага:

  1. Дайте старой ветке под .git / refs /head новое имя
  2. Дайте старой ветке под .git / logs / refs /head новое имя
  3. Обновите .git / HEAD, чтобы привести к новому имени ветви

источник