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


116

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

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

git branch -m master release

Однако это только локально. Даже если я подтолкну его к удаленному, HEAD по-прежнему указывает на удаленную главную ветвь. Я хочу полностью избавиться от основной ветки и сделать локальную ветвь по умолчанию при первоначальном клонировании.

Как я могу этого добиться?

Кажется, что, поскольку источник находится на сервере Gitorious , я получаю ошибки при удалении главной ветки. Сейчас я пытаюсь понять, можно ли изменить это так, чтобы ветвью по умолчанию было «релиз».


2
Хех, достаточно честно. Долгосрочная ценность достаточно высока, чтобы хотя бы попробовать.
Кайл Хейс


Некоторые (удаленные) серверы отказываются удалять ветку «по умолчанию» (как в случае с Github). Так что вам, возможно, нужно перейти на сервер, чтобы выбрать другую ветку «по умолчанию» для времени операций ... На Github это можно сделать в представлении «ветка».
jehon

1
git branchтеперь поддерживает --moveфлаг git-scm.com/docs/git-branch#Documentation/git-branch.txt---move
alxndr

Ответы:


141
git checkout -b release master    # Create and switch to the release branch
git push -u origin release        # Push the release branch to the remote and track it
git branch -d master              # Delete local master
git push --delete origin master   # Delete remote master
git remote prune origin           # Delete the remote tracking branch

Обратите внимание: если вы используете GitHub, вам нужно будет сначала изменить ветку «по умолчанию» на GitHub после шага 3:

В своем репозитории на github.com перейдите в НастройкиФилиалыВетвь по умолчанию . Измените его на Release, а затем выполните остальные шаги.


3
Когда я пытаюсь git push --delete, я получаю следующую ошибку: удаление текущей ветки запрещено
Кайл Хейс

8
Вы используете github или что-то подобное, вам нужно сделать ветку по умолчанию чем-то еще: matthew-brett.github.com/pydagogue/gh_delete_master.html или просто оставить там master и игнорировать его.
Адам Димитрук

Да, у нас есть печальный случай. Дай мне посмотреть, возможно ли это.
Кайл Хейс

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

1
То же ! [remote rejected] branch (deletion of the current branch prohibited) произойдет и с Bitbucket. Переключите «Главный репозиторий» на экране настроек (под значком шестеренки)
dnfehren

13

Проверьте свою главную ветку

git checkout master

Создайте свою ветку выпуска и переключитесь на нее:

git branch release
git checkout release

Отправьте это на сервер

git push origin release

Удалить ссылку на главную ветку на сервере

git push origin :master

Удалить локальную главную ветку

git branch -d master

2
По этим шагам я могу сказать, что столкнусь с той же ошибкой, о которой упоминал выше.
Кайл Хейс

@KyleHayes Это проблема конфигурации сервера. Хотя по умолчанию это так, процесс его изменения должен быть очевиден для пользователя или легко обнаружен в Stackoverflow
Джефф Ферланд,

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

5

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

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

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

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

  1. Войдите через SSH на удаленный сервер git
  2. Перейдите в папку xxx.git вашего проекта
  3. бегать: git branch -m master release

Теперь удаленный репозиторий использует в releaseкачестве своей ветки по умолчанию, и любой git cloneв этом репозитории с любого клиента будет проверять ветку выпуска по умолчанию.

Это очень полезно также после настройки чистого репозитория, чтобы настроить его в соответствии с вашими потребностями.


3

Как ранее заявляли другие, проблема здесь в Gitorious, которая не позволяет вам удалить ветку HEAD по умолчанию. У вас есть два варианта обойти эту проблему. Один из них - войти на сервер Gitorious (с помощью ssh), найти репозиторий Git на файловом сервере и добавить:

[receive]
        denyDeleteCurrent = warn

к конфигурации.

Более простой вариант - просто изменить ветку по умолчанию. Перейдите в свой репозиторий в веб-интерфейсе Gitorious, нажмите «Изменить репозиторий» и установите «Head». Измените символическую ссылку HEAD в репозитории Git на: ». После того, как вы это сделаете, вы можете удалить главную ветку.


2

Если вы столкнулись с этой проблемой с GitHub , выполните действия до удаления ветки на удаленном компьютере. Это не позволит тебе этого сделать. Затем войдите в веб-интерфейс и в репозитории перейдите в НастройкиФилиалыВетвь по умолчанию . Измените его на новую ветку и выполните остальные шаги.


1

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

git push origin HEAD:release
git checkout --track origin/release

Теперь вы хотите удалить остальные?

git branch -d master
git push origin :master

Просто!


Когда я дошел до команды git push origin: master, у меня возникла та же ошибка, что и в комментарии @ Adam.
Kyle Hayes

0

Поскольку вы закончили переименование ветвей, чтобы установить HEAD releaseдля удаленного

git remote set-head origin release

Затем, чтобы удалить masterветку на удаленном компьютере, вы должны быть администратором, по крайней мере, на GitHub. Пожалуйста, обратитесь к этому сообщению для получения дополнительной информации.

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