Как переименовать имя локальной и удаленной ветви Git?

461

У меня есть четыре ветви, такие как master -> origin / regacy, FeatureA -> origin / FeatureA. Как видите, я набрал неправильное имя.

Поэтому я хочу переименовать имя удаленной ветви (origin / regacy → origin / legacy или origin / master)

Я пробую команду ниже:

git remote rename regacy legacy

Но консоль Git вернула мне сообщение об ошибке.

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

Как я могу решить эту проблему?

Jayd
источник

Ответы:

815

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


Есть несколько способов сделать это:

  1. Измените местное отделение, а затем отправьте изменения
  2. Выдвиньте ветку на удаленную страницу с новым именем, сохранив оригинальное имя локально

Переименование локального и удаленного

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

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


Переименование только удаленного филиала

Кредит: 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>

Важная заметка:

Когда вы используете git branch -m(перемещение), Git также обновляет вашу ветку отслеживания с новым именем.

git remote rename legacy legacy

git remote renameпытается обновить удаленный раздел в вашем файле конфигурации. Он будет переименовывать пульт с заданным именем в новое, но в вашем случае он не нашел ни одного, поэтому переименование не удалось.

Но это не будет делать то, что вы думаете; он переименует ваше удаленное имя локальной конфигурации, а не удаленную ветвь. 


Примечание. Серверы Git могут позволять вам переименовывать ветви Git с помощью веб-интерфейса или внешних программ (таких как Sourcetree и т. Д.), Но вы должны помнить, что в Git вся работа выполняется локально, поэтому рекомендуется использовать приведенные выше команды. на работу.

CodeWizard
источник
Вам все еще нужно что-то сделать, после всего вышеперечисленного, и когда я пытаюсь вытащить, я получаю сообщение:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Кшиштоф Красонь
6
Не забудьте сбросить старый поток вверх по течению:git checkout <new_name> ; git branch --unset-upstream
Мигель Пинг
2
Комментарий @ MiguelPing важен. При попытке переименовать ветку, которую я уже переместил в github, удаление, переименование локальной, повторное нажатие приводит к повторному использованию старого имени. Если я --unset-upstreamперед повторным нажатием работаю как задумано.
Адам Таттл
1
Есть ли способ избежать автоматического закрытия открытых PR на ветке старого имени на удаленном компьютере? Столкнулся с этим в gitlab, где пиар на старом ветке с названием был закрыт после нажатия на origin.
Химаншу Танвар
143

Если вы назвали ветку неправильно И передали ее в удаленный репозиторий, выполните следующие действия, чтобы переименовать эту ветку ( на основе этой статьи ):

  1. Переименуйте свое местное отделение:

    • Если вы находитесь на ветке, которую хотите переименовать:
      git branch -m new-name

    • Если вы находитесь в другой ветке:
      git branch -m old-name new-name

  2. Удалите old-nameудаленную ветку и нажмите на new-nameлокальную ветку :
    git push origin :old-name new-name

  3. Сброс восходящей ветви для локальной ветви с новым именем :
    Переключитесь на ветку и затем:
    git push origin -u new-name

ZILONG PAN
источник
1
После первых 2-х шагов, если вы получаете сообщение об ошибке о том, что текущая ветвь указывает на несуществующую ветвь в удаленном репо, 3-й шаг исправляет это
Кевин Хук,
1
@ Dr1Ku Нужно знать разницу между git push <remote> --delete old_name& git push origin :old-name new-nameчтобы удалить ветку.
Ашутош Чамоли
Пользователи BitBucket: исправьте ошибку на шаге 2, если переименуете master, в Repo Details установите ветку по умолчанию на новую ветку. Ошибка: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
Колин
Самый легкий среди других
Абдулла Нилам
37

Кажется, есть прямой путь:

Если вы действительно хотите переименовать ветки удаленно (без переименования каких-либо локальных веток одновременно), вы можете сделать это с помощью одной команды, например

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

Переименование веток удаленно в Git

Смотрите оригинальный ответ для более подробной информации.

ptim
источник
1
Не работал в git. 2.20.1Удалил старую ветку, но новая не была создана.
Павел Разван Берг
26

Это также можно сделать следующим образом.

Сначала переименуйте локальную ветку, затем удаленную ветку.

Переименование местного филиала:

Если залогинен в другой ветке,

git branch -m old_branch new_branch 

Если вы вошли в ту же ветку,

git branch -m new_branch

Переименование удаленной ветки:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch
Атекер Рахман
источник
5

Если вы уже передали неправильное имя удаленному, сделайте следующее:

  1. Переключитесь на местный филиал, который вы хотите переименовать

    git checkout <old_name>

  2. Переименовать местное отделение

    git branch -m <new_name>

  3. Нажмите <new_name>локальную ветвь и сбросьте ветку восходящей

    git push origin -u <new_name>

  4. Удалить <old_name>удаленную ветку

    git push origin --delete <old_name>

Это было основано на этой статье .

milesmeow
источник
4

Прикрепление простого фрагмента для переименования текущей ветви (локальной и исходной):

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

Пояснения из git docs:

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

Специальный refspec: (или +: для разрешения обновлений без ускоренной пересылки) указывает Git выдвигать «совпадающие» ветви: для каждой ветви, которая существует на локальной стороне, удаленная сторона обновляется, если ветвь с тем же именем уже существует на удаленной стороне.

--set-upstream Настроить информацию отслеживания, чтобы она считалась восходящей веткой. Если нет, то по умолчанию используется текущая ветвь.

avivamg
источник
3

Там нет прямого метода,

  1. Переименовать местный филиал ,

    Моя текущая ветка мастер

    git branch -m master_renamed #master_renamed - новое имя мастера

  2. Удалить удаленную ветку,

    git push origin --delete master #origin is remote_name

  3. Нажмите переименованную ветку в удаленную

    git push origin master_renamed

Это оно...

Мохидин бен Мухаммед
источник
Красиво и просто и всего 3 шага. Единственное улучшение, которое я могу предложить, - git push -u origin master_renamedэто установить ветвь как отслеживающую ветвь
ut9081
2

Это можно сделать даже без переименования локальной ветки в три простых шага:

  1. Зайдите в свой репозиторий в GitHub
  2. Создайте новую ветку из старой ветки, которую вы хотите переименовать
  3. Удалить старую ветку
Code_Mode
источник
0

Я использую этот псевдоним git, и он в значительной степени выполняет работу автоматически:

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

Использование: git move FROM_BRANCH TO_BRANCH

Это работает, если у вас есть имена по умолчанию, такие как master, origin и т. Д. Вы можете изменить, как вы хотите, но это дает вам идею.

Тарик
источник
0

Мне пришлось выполнить следующую задачу, чтобы переименовать локальную и удаленную ветку:

# 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>
Себастьян Вирек
источник
Чем он отличается от существующего ответа?
Химаншу Танвар
0
  1. Переименуйте свое местное отделение. Если вы находитесь на ветке, которую хотите переименовать:

    git branch -m новое имя

Если вы находитесь в другой ветке:

git branch -m old-name new-name
  1. Удалите удаленную ветку со старым именем и нажмите локальную ветвь с новым именем.

    git push origin: old-name new-name

  2. Сброс восходящей ветви для локальной ветви с новым именем. Переключитесь на ветку и затем:

    git push origin -u новое имя

Все готово!

Анупам Маурья
источник
0
  • Переименуйте свое местное отделение .

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

git branch -m new-name

если вы остаетесь в другой ветке в настоящее время:

git branch -m old-name new-name
  • Удалите удаленную ветку со старым именем и нажмите локальную ветвь с новым именем.

Оставайтесь на целевой ветке и:

git push origin :old-name new-name
  • Сброс восходящей ветви для локальной ветви с новым именем.

Переключитесь на целевую ветку и затем:

git push origin -u new-name
Виталий Андрушишин
источник