【问题标题】:what is the difference between git push origin HEAD : remote_branch and git push origin local_branch:remote_branch?git push origin HEAD : remote_branch 和 git push origin local_branch:remote_branch 有什么区别?
【发布时间】:2020-07-21 09:59:23
【问题描述】:

当我想将更改推送到远程仓库分支时,我需要运行 git push origin local_branch:remote_branch 但有时它不起作用 甚至得到错误:src refspec local_branch 不匹配。 rungit push origin HEAD:remote_branch会很好用 我想知道这些有什么区别 谢谢!

重现我的步骤:

git checkout -b local_branch origin master

develop based on the local_branch...

git add .
git commit -m 'xxx'
git push origin HEAD:remote_branch  
//correct

git push origin local_branch:remote_branch
//error

git branch 
// can see local_branch

【问题讨论】:

  • 当你用HEAD做第二个版本时,你当前的分支是local_branch还是不同的分支?
  • 当前分支 local_branch
  • 注意:git checkout -b local_branch origin master 只会导致一个特殊的错误消息:fatal: 'master' is not a commit and a branch 'local_branch' cannot be created from it。 (master 确实命名了一个提交,所以这个错误消息是错误的。)无论如何我都无法重现这个问题。
  • 我基于来自原始仓库的原始分支创建local_branch。git克隆原始仓库,git checkout -b local_branch origin origin_branch。

标签: git github git-push


【解决方案1】:

git push 命令采用位置参数:

git push <em>remote</em> <em>refspec</em>

git fetch 命令的工作方式类似。)您的问题是关于 refspec 部分。

refspec,在 Git 中,本质上是1 一对用冒号分隔的名称 : 字符,因此 HEAD:<em>name2</em><em>name1</em>:<em>name2</em> 都有效。对于git push,左侧的名称—HEADname1—必须是您的 存储库中的有效名称,因为Git 需要使用该名称查找提交哈希 ID。右边的名字——name2——将被发送到 other Git,接收你的git push 命令的那个。您的 Git 会要求其他 Git 设置 名称 name2

当您使用 HEAD(几乎总是2 表示您自己的存储库中的有效哈希 ID 时)您的 Git 会确定您在哪个分支,3并使用该分支名称来查找要发送的提交的哈希 ID。 (例如,要查看您所在的分支,请使用 git branchgit status。)

当您使用local_branchname1 时,此必须 已经是您自己的本地 Git 存储库中的有效名称。它可以是分支名称,也可以是标签名称,甚至是其他类型的名称,但通常应该是分支名称。如果git branch 没有将local_branch 显示为分支名称(并且它不是标签或其他名称),您将收到您看到的错误消息:src refspec local_branch does not match any


1这掩盖了很多重要的细节,所以我们可以在这里只专注于两个名字的版本。特别是 refspecs 以可选的加号开头,以设置 force 标志,并且在某些情况下可以使用原始哈希 ID,和/或通过仅使用一个名称来省略冒号。

2nameHEAD 本身始终有效,即使在“分离 HEAD”模式下也是如此,但您可以在 未出生的分支上,在这种情况下HEAD 还不代表提交。

3在“分离 HEAD”模式下,您不在 任何 分支上。不过,大多数用户只会在发生冲突的 rebase 期间处于此模式。

【讨论】:

  • 谢谢,兄弟!我明白。我还有一个问题要问,我确定运行 git branch 时可以看到 local_branch。为什么会出错?这让我很困惑。
  • @LiJin:如果您可以重现问题,并包含重现问题的命令(请参阅minimal reproducible example),那么解决此类问题会容易得多。
  • 好的,我会添加命令来详细描述这个问题,谢谢
  • 我编辑了这个问题并在 git 上重现了我的步骤,非常感谢你!
猜你喜欢
  • 2012-09-09
  • 2021-04-13
  • 1970-01-01
  • 2015-07-03
  • 2015-12-08
  • 2017-09-21
  • 1970-01-01
  • 2020-07-30
  • 2023-02-02
相关资源
最近更新 更多