如何创建远程 Git 分支但不创建本地分支?

17

我想创建一个新的远程分支以备将来使用。 最常建议的方法似乎是:

git checkout -b newbranch origin/startingpoint
git push origin newbranch

但这样做也会在本地创建分支并切换到该分支。有没有一种方法可以创建远程分支而不创建本地分支并移动到该分支?

2个回答

22

简而言之:指定完整的目标引用名称,您可以直接推送提交:

git push origin origin/startingpoint:refs/heads/newbranch

你可以推送任何解析为ID的内容,包括仅仅是ID:

git push origin 6a5343d:refs/heads/newbranch

git push 操作的术语是 "refspec",这是源对象到目标名称的映射。如果您没有提供完整的 refspec,则 Git 会从您提供的内容中填充默认值。它足够好,以至于相对较少的人甚至需要知道它正在发生。

因此,"master" 通常被解析为分支名称(大多数人本能地避免使用分支和标签名称的双关语,而 Git 迎合了这些本能),您可以指定所需的 refname-typing 前缀的数量以消除歧义;当您说 git push origin newbranch 时,git 通过链接过程解析本地的 newbranch 引用,然后为您填充目标引用。


2
@twalberg:我只是猜测,但这可能与推送“匹配”分支的想法不符。当冒号左侧的部分是分支名称时,git在内部添加refs/heads/部分。当您使用原始SHA-1时,git无法将其解析为本地分支(refs/heads/*),并且不添加refs/heads/位。当然可以修复这个问题...谁知道呢! :-) - torek

9

我想把twalberg的评论作为答案。您可以通过添加refs/head/来创建远程分支:

git push origin origin/startingpoint:refs/heads/newbranch

根据 torek 的解释,如果你有一个本地分支,git push 会自动添加 refs/heads/。 如果没有本地分支,它就不知道你想将其推送到 refs/heads/ 还是 refs/tags/。 我的 git 版本显示:"我们无法根据源引用猜测前缀"。通过添加 refs/heads/,你告诉 git 在远程创建一个分支,而不是标签。

谢谢。这为我提供了一个简化和精炼的解决方案。 - Jay J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接