git push origin HEAD : remote_branch 和 git push origin local_branch:remote_branch 有什么区别?
what is the difference between git push origin HEAD : remote_branch and git push origin local_branch:remote_branch?
当我想将更改推送到远程 repo 分支时,我需要 运行
git push origin local_branch:remote_branch
但有时不起作用
即使得到 error: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 推送 <em>远程</em> <em>refspec</em>
(git fetch
命令的工作原理类似。)您的问题是关于 refspec
部分。
refspec,在Git中,本质上是1一对用冒号分隔的名字:
字符,所以 HEAD:<em>name2</em>
和 <em>name1</em>:<em>name2</em>
工作。对于 git push
,左侧的名称——HEAD
或 name1
——必须是 你的[=77] 中的有效名称=] 存储库,因为 Git 将需要使用该名称来查找提交哈希 ID。右边的名字——name2
——将被发送给 other Git,接收你的 git push
命令。您的 Git 将要求其他 Git 设置 其 名称 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 以一个可选的加号开头,以设置 force 标志,并且可以使用原始哈希 ID,and/or 通过仅使用一个名称来省略冒号,在某些情况下案例。
2nameHEAD
本身总是有效的,即使在“分离 HEAD”模式下,但您可以在 未出生的分支 上,在这种情况下 HEAD
还不代表提交。
3在“分离 HEAD”模式下,您不在 任何 分支上。不过,大多数用户只会在有冲突的 rebase 期间处于此模式。
当我想将更改推送到远程 repo 分支时,我需要 运行
git push origin local_branch:remote_branch
但有时不起作用
即使得到 error: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 推送 <em>远程</em> <em>refspec</em>
(git fetch
命令的工作原理类似。)您的问题是关于 refspec
部分。
refspec,在Git中,本质上是1一对用冒号分隔的名字:
字符,所以 HEAD:<em>name2</em>
和 <em>name1</em>:<em>name2</em>
工作。对于 git push
,左侧的名称——HEAD
或 name1
——必须是 你的[=77] 中的有效名称=] 存储库,因为 Git 将需要使用该名称来查找提交哈希 ID。右边的名字——name2
——将被发送给 other Git,接收你的 git push
命令。您的 Git 将要求其他 Git 设置 其 名称 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 以一个可选的加号开头,以设置 force 标志,并且可以使用原始哈希 ID,and/or 通过仅使用一个名称来省略冒号,在某些情况下案例。
2nameHEAD
本身总是有效的,即使在“分离 HEAD”模式下,但您可以在 未出生的分支 上,在这种情况下 HEAD
还不代表提交。
3在“分离 HEAD”模式下,您不在 任何 分支上。不过,大多数用户只会在有冲突的 rebase 期间处于此模式。