如何在不创建本地分支的情况下创建远程Git分支?

Ste*_*ers 8 git branch git-branch

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

git checkout -b newbranch origin/startingpoint
git push origin newbranch
Run Code Online (Sandbox Code Playgroud)

但这也将在本地创建分支并将其放置在上面。有没有一种方法可以创建一个远程分支而不在本地创建它并转移到它呢?

jth*_*ill 7

tl; dr:指定完整的目标引用名,您可以直接推送提交:

git push origin origin/startingpoint:refs/heads/newbranch
Run Code Online (Sandbox Code Playgroud)

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

git push origin 6a5343d:refs/heads/newbranch
Run Code Online (Sandbox Code Playgroud)

操作的术语git push是“ refspec ”,即本地对象到远程名称的映射。如果您没有提供完整的参考规格,则Git会根据您提供的内容填写默认值。足够好,甚至很少有人甚至不需要知道它的发生。

因此,“ master”通常被解析为分支名称(大多数人本能地避免修剪分支和标签名称,Git迎合具有这些本能的人),并且您可以指定需要消除歧义的很多refname-typing前缀;当您说git push origin newbranchgit newbranch通过链接过程解析本地引用,然后为您填写目标引用。

  • @twalberg:我只是在猜测,但这可能不符合推动“匹配”分支的想法。当冒号左侧的部分是分支名称时,git在内部添加`refs / heads /`部分。当您使用原始SHA-1时,git无法针对本地分支(refs / heads / *)解析它,并且不添加refs / heads /`位。哪一个当然可以解决...谁知道!:-) (2认同)

mai*_*kel 6

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

git push origin origin/startingpoint:refs/heads/newbranch
Run Code Online (Sandbox Code Playgroud)

torek解释,如果您有本地分支机构,则会自动git push添加refs/heads/。如果您没有本地分支,它将不知道您是否要推送到refs/heads/refs/tags/。我的git版本说:“我们无法根据源引用来猜测前缀”。通过添加,refs/heads/您告诉git在远程上创建分支,而不是标签。