git - git push origin HEAD : remote_branch 和 git push origin local_branch:remote_branch 有什么区别?
问题描述
当我想将更改推送到远程 repo 分支时,我需要运行
git push origin local_branch:remote_branch
,但有时甚至会出现错误:src refspec local_branch 不匹配。运行git 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
解决方案
该git push
命令采用位置参数:
git push remote refspec
(该git fetch
命令的工作方式类似。)您的问题是关于refspec
零件的。
Git 中的refspec本质上是1一对由冒号分隔的名称:
,因此两者都可以使用。对于,左侧的名称——<code>HEAD 或——必须是存储库中的有效名称,因为 Git 需要使用该名称来查找提交哈希 ID。右边的名字——<em> ——将被发送到另一个Git,也就是接收你命令的那个。您的 Git 将要求其他 Git 设置其名称。HEAD:name2
name1:name2
git push
name1
name2
git push
name2
当您使用时(HEAD
几乎总是2代表您自己的存储库中的有效哈希 ID),您的 Git 将确定您所在的分支3并使用该分支名称来查找要发送的提交的哈希 ID。(例如,要查看您所在的分支,请使用git branch
或git status
。)
当您使用name1
诸如时local_branch
,这必须已经是您自己的本地 Git 存储库中的有效名称。它可以是分支名称,也可以是标签名称,甚至是其他类型的名称,但通常应该是分支名称。如果git branch
不显示local_branch
为分支名称(并且它不是标签或其他名称),您将收到您看到的错误消息:src refspec local_branch does not match any
.
1这掩盖了很多重要的细节,所以我们可以在这里只专注于两个名字的版本。特别是 refspecs 以可选的加号开头,以设置强制标志,并且在某些情况下可以使用原始哈希 ID,和/或通过仅使用一个名称来省略冒号。
2名称 本身始终有效,即使在“分离 HEAD”模式下HEAD
也是如此,但您可以在未出生的分支上,在这种情况下HEAD
还不代表提交。
3在“分离 HEAD”模式下,您不在任何分支上。不过,大多数用户只会在冲突的 rebase 期间处于此模式。
推荐阅读
- python - 为什么我的文件在使用 endwith() 时无法识别
- scala - 如何实现具有混合但受限类型的键、值对的集合
- android - textview 在recycleview 项目上重叠
- android - 获取屏幕尺寸
- linux - 如何在 Linux 中运行 asp dot net core 映像?
- python - 当使用 pandas 在 csv 中满足条件时,需要删除行并更新其他行
- android - 房间迁移?
- customization - Netsuite 字段未显示在套件记录中
- ios - 创建相机无法通过的实体场景包节点
- javascript - Javascript Youtube Data API v3:在播放列表中插入视频(找不到视频)