Переименование ветки в GitHub

297

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

git branch -m oldname newname

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

enchance
источник
5
Возможный дубликат git: переименуйте удаленную ветку
Andrew Marshall
Вы проверили в настройках администратора? В моем текущем проекте на github нет никаких веток, но вы можете переименовать репозиторий там, поэтому я думаю, что вы можете переименовать и ветки.
evanmcdonnal
12
@evanmcdonnal Нет, вы не можете переименовать ветку Git с сайта GitHub.
Эндрю Маршалл
Ответы на этот вопрос почти всегда неверны. Вопрос не в том, как переименовать ветку git, а в том, как переименовать ветку github . Многие вещи на github связаны с веткой, что означает, что любой ответ должен охватывать эти вещи. Например, переименование мастера в main
gman
@ gman Что бы это ни стоило, кажется, что эти ответы ответили на дух вопроса ОП. Вопрос ОП, возможно, был не совсем правильно сформулирован, с технической точки зрения, или уместной проблемой, которую вы сейчас рассматриваете. Но тогда этот вопрос не связан с глубокими техническими знаниями git или GitHub. С этой точки зрения можно считать это «новичком» или элементарным вопросом. Как таковой, он сформулирован и ответил соответственно для этой аудитории. Разочаровывающе, конечно, но я думаю, что эти Q, эти Ответы уместны / актуальны, особенно для pre BLM git / Hub Q.
SherylHohman

Ответы:

309

Как уже упоминалось, удалите старую версию на 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 операции push:

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. Смотрите это обсуждение для деталей.

Адам Паркин
источник
32
Обратите внимание , что вы можете комбинировать 2 нажимные операции: git push origin :old_branch new_branch. Это удалит старую ветку и вытолкнет новую.
void.pointer
4
Есть ли какая-то причина, по которой новую ветвь нельзя вытолкнуть перед удалением старой? Я лично предпочитаю процессы, где операция удаления происходит после того, как операция создания успешна, на случай, если что-то пойдет не так.
jmort253
7
Не работает. Он просто вернет ветку на Github со своим старым именем.
Джефф
1
@AdamParkin 1. git branch -m new_branch(переименуйте old_branch в new_branch) 2. git commit -m 'msg', 3. git push4. Ммм, old_branch появляется в Github, вопрос Google, и меня выводят на ваш ответ 5. git push origin :old_branch(говорит, что он удален) 6. git push origin new_branch... завершает, затем говорит * [new branch] new_branch -> old_branch. Вернитесь к Github и old_branchснова появитесь . Если я удаляю в веб-интерфейсе Github, у меня есть опция «Восстановить», поэтому кажется, что нажатие на new_branch просто восстанавливает.
Kcvin
2
Следует помнить одну вещь: когда вы переименовываете ветку, все открытые запросы на этот запрос автоматически закрываются. Нам пришлось переименовать ветку обратно, а затем снова вручную открыть все запросы на извлечение ....
jmort253
24

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

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
Таймур Чангайз
источник
Это краткий ответ, который работает. Кстати, первая команда также может быть указана последней в ответе.
Эрик Ван
этот ответ охватывает git not github
gman
1
На самом деле, я просто делал это дважды, и это работало на github.
spozun
17

Я нашел 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

Азарапет Туанян
источник
1
git push --set-upstreamявляется наиболее важной частью, если вы случайно изменили имя ветки с помощью приложения github перед удалением удаленной ветки.
Луи Ян
этот ответ охватывает git not github
gman
12

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

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

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

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

Vi.
источник
1
Не должно быть 2-й команды git push origin newname:refs/heads/newname? master и newname могут не указывать на один и тот же коммит.
Стив Фолли
«мастер» просто как пример, теперь изменится.
Ви.
Возможно, порядок двух команд следует поменять местами (т.е. сначала загрузить новое имя, затем удалить старое)
Vi.
этот ответ охватывает git not github
gman
@ gman, не переименовывает ли он Git-мудрый, не переименовывает ли он Github-мудрый?
Ви.
9

Переименуйте ветки в 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

Итак, вывод

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name
Абдельрахман Мухаммед
источник
этот ответ охватывает git not github
gman
Это для git, а GitHub находится под git, поэтому он будет работать и работать со мной и с другими
Абдельрахман Мохамед
Это не работает Попробуйте первый и второй шаги git branch -m new-name && git push origin :master new-name. Это не удастся. Если этот ответ касается только git, а не github, тогда этот вопрос является дубликатом нескольких других вопросов и должен быть закрыт. Если это действительно о github, то ответ должен охватывать github. Этот ответ не дает.
мужчина
6

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

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

rneves
источник
2

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

1.) Сначала создайте новую ветку: git push github newname: refs /head / newname

2.) На сайте github зайдите в настройки и измените ветку Default на newname.

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

Wiley
источник
0
  1. Скачать Atlassian SourceTree (бесплатно).
  2. Импортируйте свой локальный клон репозитория.
  3. Щелкните правой кнопкой мыши свою ветку, чтобы переименовать, на боковой панели. Выберите «Переименовать ветку ...» из контекстного меню и переименуйте его.
  4. Толчок к происхождению.
инженер
источник
Спасибо, но мне пришлось переключиться на ветку, а также импортировать ее.
Флэш Шеридан
1
этот ответ охватывает git not github
gman
0

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

Даниэль Кобе
источник
этот ответ охватывает git not github
gman
0

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

  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

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

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


Внимание

Если ваше текущее имя ветки содержит slashes ( /), 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 / *, потому что вы уже находитесь на удаленном сервере;)

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

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


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

Iyashi
источник
этот ответ охватывает git not github
gman
0

В моем случае мне потребовалась дополнительная команда, чтобы заставить мою переименованную ветку перейти в .
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 oldnameoldnamegit pushgit push origin oldname

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

SherylHohman
источник
этот ответ охватывает git not github
gman
@ gman Точка занята. Мое решение использует git локально, чтобы переименовать ветку на GitHub, удаленно, после переименования его в локальной копии git репозитория GitHub. Поэтому, возможно, это можно считать специализированным решением, если вы хотите использовать командную строку, а не интерфейс веб-сайта GitHub, и у вас есть локальный клон, который вы также хотели бы обновить. Спасибо за то, что подчеркнули это различие и пояснили, что этот ответ предназначен для особого случая, а не для общего решения.
Шерил Хохман
Проблема в том, что github связывает функции с ветками. Попробуйте переименовать master в main, и ваши инструкции не будут выполнены.
мужчина
-1

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

git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch
Пуджа Грива
источник
Хотя ваш фрагмент кода может решить проблему, вы должны описать, какова цель вашего кода (как он решает проблему). Кроме того, вы можете проверить stackoverflow.com/help/how-to-answer
Ахмад Ф
этот ответ охватывает git not github
gman
-1

Все просто . Чтобы переименовать ветку git локально и удаленно, используйте этот фрагмент (протестировано и работает как брелок):

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

Объяснение:

  1. Переименовать Шаг:

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

  2. Удалить шаг:

    Ссылка на Git: git push origin: экспериментальный. Найдите ссылку, соответствующую экспериментальной, в репозитории origin (например, refs /heads / экспериментальный) и удалите ее.

  3. Обновление на этапе удаленного репо (восходящая ссылка для отслеживания):

    Ссылка на Git: --set-upstream Для каждой ветки, которая актуальна или успешно отправлена, добавьте ссылку на восходящий поток (отслеживание), используемую git-pull [1] без аргументов и другими командами. Для получения дополнительной информации см. Branch..merge в git-config [1].

avivamg
источник
этот ответ охватывает git not github
gman
-1

3 простых шага

  • git push origin head

  • git branch -m old-branch-name новое-имя-ветви

  • git push origin head

Мартин Мунгай
источник
этот ответ охватывает git not github
gman
После того, как вы нажмете на него обновления Github
Martin
Не работает Все, что он сделал, - это создал новую ветку на github. Он не переименовал ветку. pastebin.com/dDh06HEb
gman
-1

В ветке git запустите git branch -m old_name new_name Это изменит имя ветки в вашем локальном репозитории git push origin: old_name new_name Это приведет к удалению измененного имени и удалению старой ветви git push origin -u new_name Устанавливает отслеживание локальной ветви удаленная ветка. Это решает проблему

Папа Франциск
источник
этот ответ охватывает git not github
gman