如果有一个存储库,我只有git://访问(通常只是推+拉),是否有一种方法重命名该存储库中的分支,以同样的方式,我将在本地用git branch -m?
当前回答
除了已经给出的答案,下面是一个版本,它首先检查新分支是否已经存在(因此您可以安全地在脚本中使用它)
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"
(检查来自这个答案)
其他回答
按照以下步骤更改分支名称:
Git branch -m old_branchname new_branchname Git推送源:old_branchname new_branchname Git push——set-upstream origin new_branchname
之后取回原点
Git获取来源 Git远程删除源文件
我不知道为什么,但@Sylvain Defresne的答案对我来说不管用。
git branch new-branch-name origin/old-branch-name
git push origin --set-upstream new-branch-name
git push origin :old-branch-name
我必须取消上游的设置,然后我可以再次设置流。以下是我是如何做到的。
git checkout -b new-branch-name
git branch --unset-upstream
git push origin new-branch-name -u
git branch origin :old-branch-name
当然。只需在本地重命名分支,推送新分支,并推送旧分支的删除。
唯一真正的问题是存储库的其他用户不会重命名本地跟踪分支。
如果你在用Github…
你可以使用github.com上的UI创建一个基于旧名称分支的新分支:
如果你真的只想远程重命名分支,而不同时重命名任何本地分支,你可以用一个命令来完成:
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>
我编写了这个脚本(git-rename-remote-branch),它提供了一个方便的快捷方式来轻松完成上述操作。
作为bash函数:
git-rename-remote-branch() {
if [ $# -ne 3 ]; then
echo "Rationale : Rename a branch on the server without checking it out."
echo "Usage : ${FUNCNAME[0]} <remote> <old name> <new name>"
echo "Example : ${FUNCNAME[0]} origin master release"
return 1
fi
git push $1 $1/$2\:refs/heads/$3 :$2
}
要整合@ksrb的评论:这基本上是在一个命令中进行两次推送,首先git push <remote> <remote>/<old_name>:refs/heads/<new_name>,以基于旧的远程跟踪分支推送一个新的远程分支,然后git push <remote>:<old_name>删除旧的远程分支。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别