Переименование ветки в github - PullRequest
244 голосов
/ 02 марта 2012

Я только что переименовал свою локальную ветку, используя

git branch -m oldname newname

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

Ответы [ 11 ]

270 голосов
/ 02 марта 2012

Как уже упоминалось, удалите старую версию на Github и повторите ее, хотя используемые команды немного более многословны, чем необходимо:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Простая.Немного рассредоточив команды, команда git push выглядит так:

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

Таким образом, выполнение push без указания local_branch означает, по сути, «ничего не взять из моего локального репозитория и сделать его удаленной веткой».Я всегда думал, что это совершенно глупо, но так оно и есть.

Редактировать: Начиная с Git 1.7 существует альтернативный синтаксис для удаленияудаленная ветвь:

git push origin --delete name_of_the_remote_branch

Редактировать: Как упомянуто @ void.pointer в комментариях

Обратите внимание, что вы можете объединить 2 операции нажатия:

git push origin :old_branch new_branch

Это удалит старую ветку и вытолкнет новую.

Это можно превратить в простой псевдоним, который принимает удаленный, оригинальныйветвь и имя новой ветки в качестве аргументов, в ~/.gitconfig:

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

Использование:

git branchm origin old_branch new_branch

Обратите внимание, что позиционные аргументы в командах оболочки были проблемными в более старых (до 2.8?) версияхgit, поэтому псевдоним может варьироваться в зависимости от версии git.См. это обсуждение для деталей.

14 голосов
/ 04 мая 2015

У меня работали следующие команды:

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
13 голосов
/ 02 марта 2012

Просто удалите старую ветку и создайте новую.

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

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

Вам также, вероятно, следует переименовать локальную ветку и изменить настройки, гдеТяни / Толкай.

10 голосов
/ 10 мая 2016

Я нашел 3 команды, как вы можете изменить имя вашей ветки git, и эти команды - более быстрый способ сделать это

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

3 голосов
/ 19 августа 2015

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

https://github.com/blog/1377-create-and-delete-branches

1 голос
/ 03 июня 2017

В моем случае мне понадобилась дополнительная команда
git branch --unset-upstream
чтобы моя переименованная ветка поднялась до origin newname.

(для удобства набора текста) я сначала git checkout oldname.
Затем выполните следующее:

git branch -m newname
git push origin :oldname или git push origin --delete oldname
git branch --unset-upstream
git push -u origin newname или git push origin newname

Этот дополнительный шаг может быть необходим только потому, что я (как правило) настраиваю удаленное отслеживание на своих ветках с помощью git push -u origin oldname. Таким образом, когда я выписал oldname, мне нужно только набрать git push, а не git push origin oldname

Если я НЕ , использую команду git branch --unset-upstream перед git push origin newbranch, git воссоздает oldbranch и толкает newbranch в origin oldbranch - победив намерение.

1 голос
/ 15 ноября 2015

Эта статья показывает, как это сделать очень легко.
1. Чтобы переименовать локальную ветку Git, мы можем использовать команду Git branch -m, чтобы изменить имя:
git branch -m feature1 feature2
2. Если вы просто ищете команду для переименования удаленной ветки Git, вот оно "
git push -u origin feature2:feature3
Убедитесь, что у вас нет тегов на ветке, прежде чем вы это сделаете. Вы можете сделать это с git tag.

1 голос
/ 04 июня 2015

Вот что у меня сработало:

1.) Сначала создайте новую ветку: git push github новое имя: ссылки / головы / новое имя

2.) На сайте github перейдите в настройки и измените ветку по умолчанию на новое имя

3.) Удалить старое имя git push github - удалить старое имя

0 голосов
/ 15 марта 2018

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

0 голосов
/ 10 августа 2016

Другой способ - переименовать следующие файлы :

  1. перейдите в каталог вашего проекта
  2. переименовать .git/refs/head/[branch-name] в .git/refs/head/new-branch-name
  3. переименовать .git/refs/remotes/[all-remote-names]/[branch-name] в .git/refs/remotes/[all-remote-names]/new-branch-name

Переименование Голова и пульты на локальном ПК и на исходных / удаленных серверах

Филиал теперь переименован (локальный и удаленный!)


Внимание

Если ваше текущее имя-ветви содержит косую черту (/) git создаст каталоги так:

текущее имя филиала: "awe/some/branch"

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

Желаемое имя филиала: "new-branch-name"

  1. перейдите в каталог вашего проекта
  2. скопировать файл branch из .git/refs/*/awe/some/
  3. вставьте .git/refs/head/.
  4. скопировать файл branch из всех .git/refs/remotes/*/awe/some/
  5. положить их в .git/refs/remotes/*/.
  6. переименование всех опифицированных branch файлов в new-branch-name.
  7. проверить, выглядит ли структура каталогов и файлов следующим образом:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. сделать то же самое на всех ваших удаленных источниках / серверах (если существует)
    • info : на удаленных серверах обычно нет каталогов refs / remotes / *, потому что вы уже на удаленном сервере;) (ну, может быть, в расширенных конфигурациях git это возможно, но я никогда не видел этого)

Ветка теперь переименована с awe/some/branch на new-branch-name (локальный и удаленный!)

Каталоги в имени филиала были удалены.


Информация: Этот способ может быть не самым лучшим, но он по-прежнему работает для людей, у которых могут быть проблемы с другими способами

...