git push origin开发和git push origin之间的区别HEAD:开发

时间:2016-03-28 03:09:06

标签: git

几个星期后使用git作为一台机器,现在我正在试图弄清楚GIT是如何工作的。比起我开始时的简单事情:

Me

然后我怀疑:

当我尝试推动时:

git checkout -b test origin/development`   //Creating new local branch from development

Create new text file called test.txt

git add . //Set files that will be committed
git commit -m "this is a test" // Committing

日志说:一切都是最新的

如果我尝试推动:

git push origin development

它可以正常工作。

进行我的研究我发现HEAD表示当前分支的名称。所以,如果它是对的,那对我来说没有任何意义。

之间有什么区别
git push origin HEAD:development

git push origin development

3 个答案:

答案 0 :(得分:2)

git push origin development推送development分支

git push origin HEAD:development将当前分支推送到远程development

您很可能不在本地development分支机构。请考虑使用

进行检查
git status

命令。

答案 1 :(得分:1)

git push remote-name some-name

尝试将名为some-name的任何本地分支推送到在some-name解析的名为remote-name/some-name的远程分支 。在引擎盖下,它正在refs下寻找匹配的每个位置(本地,远程)的分支名称。

由于您的development本地副本尚未修改,因此您会收到一条消息,指出它是最新的,无需推送。

备用版本

git push remote-name HEAD:development

跳过关于在本地和远程refs中查找匹配分支名称的部分,因为您已通过HEAD为其提供了显式分支。

它仍然使用远程refs来确定远程分支development。但是它使用当前分支的HEAD(您的新test分支)来提交提交。

如果您只想从git push分支执行test并正确地从test推送到remote/development,则可以将push的默认行为配置为“上游”设置(请注意,“跟踪”一词是“上游”的较旧术语,这是首选)。

待办事项

git config --global push.default upstream

确保普通git push只会尝试从当前分支推送到其注册的上游分支。

如果没有这个设置,在git版本2.0之前,普通git push的默认模式会导致尝试将所有本地分支推送到上游分支,并在其配置的遥控器上使用匹配的名称。对于git 2.0及更新版本,默认设置为simple,其作用类似于upstream,但如果当前分支与其配置的远程分支的名称不同,它也无法推送。

“上游”设置是一个很好的设置,因为(a)它允许轻松推送分支,无论它们的名称是否与其上游名称匹配; (b)对于2.0之前的版本,它将git push的裸调用限制为仅影响当前分支,因此如果您在多个分支上积极开发,git push将不再无意中推动其他工作与当前的分支机构无关; (c)你不需要专门命名远程和分支的git push形式,除非你试图推送到你当前分支的一个不是配置上游的分支 - 我认为这是最有用的感觉:如果你没有从本地分支推送到其自然的,配置的上游目标,你应该只需要详细说明分支。即使2.0 simple设置也不满足此要求。

remote-name通常为origin,但可以是任何已配置的远程,通过各种git命令添加,或直接在.gitconfig文件中添加。

答案 2 :(得分:0)

git push origin development

将尝试推送您的本地开发分支。通过这种git push命令,git会认为本地分支和远程跟踪分支具有相同的分支nanme。

从git push的manpage

git push origin master Find a ref that matches master in the source repository (most likely, it would find refs/heads/master), and update the same ref (e.g. refs/heads/master) in origin repository with it. If master did not exist remotely, it would be created.