致命错误:.git/refs/heads/master:.git/refs/remotes/origin/master是不合法的参考名称的远程部分。

3

我知道使用git push origin master更加简单,但是如果我这样做:

git push origin .git/refs/heads/master:.git/refs/remotes/origin/master 

我收到的信息是:
致命错误:.git/refs/heads/master:.git/refs/remotes/origin/master 的远程部分不是有效名称
为什么这个不能工作呢?
我只是想要遵循下面的步骤:
git push [remotename] [localbranch]:[remotebranch]

1个回答

4

Refspecs不是相对路径名,"绝对的" refspecs 只以 refs/ 开头。你试图推送的最 "绝对" 版本应该是:

git push origin refs/heads/master:refs/remotes/origin/master

然而,这并不等同于 git push origin master。此操作更新远程的远程跟踪分支origin/master,因此它可能反映其远程origin实际所在的位置,也可能不反映。

等效于git push origin master的命令是:

git push origin refs/heads/master:refs/heads/master

refs/heads/master与我本地机器上的分支master不同? - Terry
refs/heads/master与我的本地分支master不同?refs/remotes/origin/master与我在github上的远程分支master不同?为什么要使用refs / heads / master而不是refs / remotes / origin / master? - Terry
我不确定我理解你前三个问题的意思。refs/heads/master是任何存储库上本地主分支的名称。当您执行git push origin master时,您正在更新远程的主分支以匹配您的本地主分支。推送中冒号的左侧是要在本地存储库上推送的引用,右侧是要在远程存储库上推送到的引用。您(几乎)永远不想将推送内容推送到远程存储库的远程跟踪分支。它们只是远程存储库的其远程分支的副本。 - CB Bailey
我在refs/remotes/origin/master中拥有的内容,实际上也存在于我的本地机器上吗?我的意思是,refs/remotes/origin/master与git diff一起使用吗?因此,它是远程分支的副本,但这不是真正的远程分支。 - Terry
@Terry:任何通过git clone创建的存储库都将在refs/remotes/origin下拥有一组远程跟踪分支,因此在本地和远程存储库上都可能存在名为refs/remotes/origin/master的引用。当您执行提取操作时,默认情况下,所有远程分支(refs/heads/*)都会被复制到本地存储库中的(refs/remotes/origin/*)作为远程跟踪分支,以便您可以对远程分支执行git操作(例如rebase、merge、log等)。 - CB Bailey

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