git:远程重命名分支?

kdt*_*kdt 390 git branch rename

如果有一个我只有git://访问权限的存储库(并且通常只是push + pull),有没有办法以与我本地相同的方式重命名该存储库中的分支git://

Syl*_*sne 467

您只需要创建一个具有所需名称的新本地分支,将其推送到远程,然后删除旧的远程分支:

$ git branch new-branch-name origin/old-branch-name
$ git push origin --set-upstream new-branch-name
$ git push origin :old-branch-name
Run Code Online (Sandbox Code Playgroud)

然后,要查看旧分支名称,存储库的每个客户端都必须执行以下操作:

$ git fetch origin
$ git remote prune origin
Run Code Online (Sandbox Code Playgroud)

注意:如果旧分支是主分支,则应更改主分支设置.否则,当您运行时 $ git push origin :old-branch-name,您将收到错误"禁止删除当前分支".

  • 当然.我的意思是,如果你以自动的方式调用它(作为其他一些脚本的一个功能部分),如果你可以避免它,你可能也不会做错它. (9认同)
  • 丹的方式:重新排序命令,以便它们始终正常工作.地球引擎的方式:永远记得检查,否则你会丢失数据.我知道我选哪一个. (9认同)
  • 好吧,如果旧名称和新名称相同,则表示您不需要重命名分支,因此首先运行命令没有意义;-) (8认同)
  • 用户可以运行:`git fetch origin --prune`(有效地获取新分支,并且不再在远程上删除引用). (2认同)
  • 可以在较新版本的 git 中使用 `-d` 或 `--delete` 代替 `:`。 (2认同)

ssc*_*rth 278

如果您真的只想远程重命名分支,而无需同时重命名任何本地分支,则可以使用以下命令执行此操作:

git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>
Run Code Online (Sandbox Code Playgroud)

我写了这个脚本(git-rename-remote-branch),它提供了一个方便的快捷方式来轻松完成上述操作.

要集成@ ksrb的注释:这基本上是两个推送单个命令,首先git push <remote> <remote>/<old_name>:refs/heads/<new_name>是基于旧的远程跟踪分支推送新的远程分支,然后git push <remote> :<old_name>删除旧的远程分支.

  • 对于那些对这个命令实际意味着什么好奇的人来说,基本上是2推`git push <remote>/<old_name>:refs/heads/<new_name>`意味着推送一个使用旧遥控器的新遥控器作为src**然后**`git push [space]:<old_name>`表示删除旧的遥控器 (32认同)
  • 对于那些想要该命令的别名的人:rename ="!f(){git push origin origin/$ 1:refs/heads/$ 2:$ 1;}; f"这可以用作> git rename <old_name> < NEW_NAME> (10认同)
  • 不,因为远程分支"<new_name>"尚不存在.如果分支不存在,Git要求您使用全名,否则`<new_name>`也可以引用标记名称. (6认同)
  • 你为什么需要使用`refs/heads/name`?你不能直接使用`name`,制作第一个命令`git push <remote> <remote>/<old_name>:<new_name>`? (3认同)
  • 我们在构建系统中使用这种方法.我们遇到的唯一警告是,如果`refs/heads/<new_name>`已经存在.删除仍然成功,导致只删除`<remote>/<old_name>`.一些事先检查可以轻松避免这种情况. (2认同)
  • @cupawntae:你逃脱冒号的原因是什么? (2认同)

Sha*_*gde 165

首先结帐到要重命名的分支

git branch -m old_branch new_branch
git push -u origin new_branch
Run Code Online (Sandbox Code Playgroud)

要从远程删除旧分支:

git push origin :old_branch
Run Code Online (Sandbox Code Playgroud)

  • 当您将重命名的分支(new_branch)推送到远程(原点)时,您还应将其上游设置为使用新名称跟踪分支(例如`git push -u origin new_branch`),否则重命名的分支(new_branch)将继续跟踪origin/old_branch.一旦你删除了远程old_branch,new_branch仍将跟踪origin/old_branch,尽管现在该分支已经消失. (12认同)

Lil*_*ard 10

当然.只需在本地重命名分支,然后推送新分支并推送删除旧分支.唯一真正的问题是repo的其他用户不会重命名本地跟踪分支.


小智 5

要更改分支名称,请按照以下步骤操作:

  1. git 分支 -m 旧分支名称 新分支名称
  2. git push origin : 旧分支名称 新分支名称
  3. git push --set-upstream origin new_branchname

之后获取原点

  1. git 获取原点
  2. git 远程修剪原点


归档时间:

查看次数:

285530 次

最近记录:

6 年,5 月 前