【问题标题】:How to create a remote Git branch without creating a local branch?如何在不创建本地分支的情况下创建远程 Git 分支?
【发布时间】:2013-12-13 04:24:20
【问题描述】:

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

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

但这也会在本地创建分支并将我放在上面。有没有一种方法可以创建远程分支,而无需在本地创建并移动到它上?

【问题讨论】:

    标签: git branch git-branch


    【解决方案1】:

    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。

    【讨论】:

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

    我想回复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 在远程创建一个分支,而不是一个标签。

    【讨论】:

    • 谢谢。这为我提炼并简化了解决方案。
    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 2014-08-09
    • 2011-06-29
    • 2016-02-06
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2016-05-06
    相关资源
    最近更新 更多