【发布时间】:2013-12-13 04:24:20
【问题描述】:
我想创建一个新的远程分支供以后使用。 最常见的建议方式似乎是:
git checkout -b newbranch origin/startingpoint
git push origin newbranch
但这也会在本地创建分支并将我放在上面。有没有一种方法可以创建远程分支,而无需在本地创建并移动到它上?
【问题讨论】:
标签: git branch git-branch
我想创建一个新的远程分支供以后使用。 最常见的建议方式似乎是:
git checkout -b newbranch origin/startingpoint
git push origin newbranch
但这也会在本地创建分支并将我放在上面。有没有一种方法可以创建远程分支,而无需在本地创建并移动到它上?
【问题讨论】:
标签: git branch git-branch
tl;dr:指定完整的目标引用名,您可以直接推送提交:
git push origin origin/startingpoint:refs/heads/newbranch
您可以推送任何解析为 id 的内容,包括仅 id:
git push origin 6a5343d:refs/heads/newbranch
git push 操作的术语是“refspec”,即源对象到目标名称的映射。如果您不提供完整的 refspec,Git 会根据您提供的内容填充默认值。这已经足够好,很少有人需要知道它正在发生。
所以"master" generally gets resolved as a branch name(大多数人本能地避免双关语分支和标签名称,Git 迎合具有这些本能的人),您可以指定需要消除歧义的任何 refname-typing 前缀;当你说 git push origin newbranch 时,git 通过链接过程解析本地 newbranch ref,然后为你填写目标 ref。
【讨论】:
refs/heads/ 部分。当您使用原始 SHA-1 时,git 无法针对本地分支 (refs/heads/*) 解析它并且不添加 refs/heads/ 位。这当然可以修复......谁知道呢! :-)
我想回复twalberg's comment。您可以通过添加refs/head/ 来创建远程分支:
git push origin origin/startingpoint:refs/heads/newbranch
作为torek explains,如果您有本地分支,git push 会自动添加refs/heads/。如果您没有本地分支,它不知道您是要推送到refs/heads/ 还是refs/tags/。我的 git 版本说:“我们无法根据源引用猜测前缀”。通过添加refs/heads/,你告诉 git 在远程创建一个分支,而不是一个标签。
【讨论】: