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


297

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

git branch -m oldname newname

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



Вы проверили в настройках администратора? В моем текущем проекте на 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

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


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. Этот ответ не дает.
— мужчина


2

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

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

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

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


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(локальный и удаленный!)

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


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


этот ответ охватывает 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победе над моими намерениями.


этот ответ охватывает 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].


этот ответ охватывает 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.