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
答案 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.