【问题标题】:fatal: remote part of refspec is not a valid name in .git/refs/heads/master:.git/refs/remotes/origin/master致命:refspec 的远程部分不是 .git/refs/heads/master:.git/refs/remotes/origin/master 中的有效名称
【发布时间】:2011-09-06 07:28:49
【问题描述】:

我知道使用git push origin master 会更容易,但如果我这样做:

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

我明白了:

致命:refspec 的远程部分在 .git/refs/heads/master:.git/refs/remotes/origin/master 中不是有效名称

为什么这不起作用?

我只是想跟随:

git push [remotename] [localbranch]:[remotebranch]

【问题讨论】:

标签: git


【解决方案1】:

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 不同?
  • refs/heads/master 与我本地的分支 master 不同? refs/remotes/origin/master 与我在 github 上的远程分支 master 不同?为什么使用 refs/heads/master 而不是 refs/remotes/origin/master?
  • 我不确定我是否理解您的前三个问题。 refs/heads/master 是任何存储库上本地主分支的名称。当您执行git push origin master 时,您正在更新远程的主分支以匹配您的本地主分支。 push 中冒号的左侧是指要推送到本地存储库的 ref,冒号的右侧是指要推送到远程存储库的 ref。您(几乎)永远不想将推送到远程存储库的远程跟踪分支。它们只是远程分支的远程副本。
  • 我在 refs/remotes/origin/master 中的东西,实际上是在我的本地机器上吗?我的意思是,refs/remotes/origin/master 与 git diff 一起使用?所以,它是远程分支的副本,但这不是真正的远程分支。
  • @Terry:任何通过git clone 创建的存储库都将在refs/remotes/origin 下拥有一组远程跟踪分支,因此您的本地和远程都可能存在名为refs/remotes/origin/master 的引用存储库。默认情况下,当您执行 fetch 时,远程 (refs/heads/*) 上的所有分支都将作为远程跟踪分支复制到 (refs/remotes/origin/*) 下的本地存储库,以便您可以执行 git 操作(例如 rebase、merge、log、等)在远程分支上。
猜你喜欢
  • 1970-01-01
  • 2018-12-25
  • 2017-12-07
  • 2022-08-15
  • 2021-03-29
  • 1970-01-01
  • 2016-06-24
  • 2019-10-26
  • 1970-01-01
相关资源
最近更新 更多