Если есть репозиторий, у меня есть только git://доступ к (и обычно просто push + pull), есть ли способ переименовать ветки в этом репозитории так же, как я бы сделал локально с git branch -m
?
Git: переименование веток удаленно?
Ответ 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"
(проверка от этого ответа)