Git: переименование веток удаленно?

Если есть репозиторий, у меня есть только git://доступ к (и обычно просто push + pull), есть ли способ переименовать ветки в этом репозитории так же, как я бы сделал локально с git branch -m?

Ответ 1

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

$ git branch new-branch-name origin/old-branch-name
$ git push origin --set-upstream new-branch-name
$ git push origin :old-branch-name

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

$ git fetch origin
$ git remote prune origin

ПРИМЕЧАНИЕ. Если ваша ветка является вашей основной веткой, вы должны изменить свои основные настройки ветки. В противном случае, когда вы запустите $ git push origin :old-branch-name, вы получите сообщение об ошибке "удаление текущего запрета" .

Ответ 2

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

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

Я написал этот script (git-rename-remote-branch), который обеспечивает удобный ярлык, чтобы сделать это легко.

Чтобы интегрировать комментарий @ksrb: в основном это два нажатия в одной команде, сначала git push <remote> <remote>/<old_name>:refs/heads/<new_name> для ввода новой удаленной ветки на основе старой ветки удаленного отслеживания, а затем git push <remote> :<old_name> для удаления старой удаленной ветки.

Ответ 3

Первая проверка в ветку, которую вы хотите переименовать

git branch -m old_branch new_branch
git push -u origin new_branch

Чтобы удалить старую ветку с удаленного устройства:

git push origin :old_branch

Ответ 4

Конечно. Просто переименуйте ветвь локально, затем нажмите новую ветку и нажмите удаление старого. Единственная реальная проблема заключается в том, что другие пользователи репо не будут переименовывать локальные ветки отслеживания.

Ответ 5

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

git push origin old_branch:new_branch
git push origin :old_branch

Ответ 6

Добавив к уже предоставленным ответам, вот версия, которая сначала проверяет, существует ли новая ветвь (так что вы можете безопасно использовать ее в script)

if git ls-remote --heads "$remote" \
    | cut -f2 \
    | sed 's:refs/heads/::' \
    | grep -q ^"$newname"$; then
    echo "Error: $newname already exists"
    exit 1
fi
git push "$oldname" "$remote/$oldname:refs/heads/$newname" ":$oldname"

(проверка от этого ответа)