我想创建一个新的远程分支以备将来使用。 最常建议的方法似乎是:
git checkout -b newbranch origin/startingpoint
git push origin newbranch
但这样做也会在本地创建分支并切换到该分支。有没有一种方法可以创建远程分支而不创建本地分支并移动到该分支?
我想创建一个新的远程分支以备将来使用。 最常建议的方法似乎是:
git checkout -b newbranch origin/startingpoint
git push origin newbranch
但这样做也会在本地创建分支并切换到该分支。有没有一种方法可以创建远程分支而不创建本地分支并移动到该分支?
简而言之:指定完整的目标引用名称,您可以直接推送提交:
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
引用,然后为您填充目标引用。
我想把twalberg的评论作为答案。您可以通过添加refs/head/
来创建远程分支:
git push origin origin/startingpoint:refs/heads/newbranch
git push
会自动添加 refs/heads/
。 如果没有本地分支,它就不知道你想将其推送到 refs/heads/
还是 refs/tags/
。 我的 git 版本显示:"我们无法根据源引用猜测前缀"。通过添加 refs/heads/
,你告诉 git 在远程创建一个分支,而不是标签。
refs/heads/
部分。当您使用原始SHA-1时,git无法将其解析为本地分支(refs/heads/*
),并且不添加refs/heads/
位。当然可以修复这个问题...谁知道呢! :-) - torek