需要解释“git push”命令的工作原理

时间:2011-11-06 16:33:55

标签: git github

我试图将我的源代码部署到Github上。 然后,我首先将github源添加到远程源,如下所示:

$ git remote add origin git@github.com:user_name/foo_bar.git*

然后,我尝试运行“git push”命令将我的源代码上传到我的远程github帐户,如下所示。

$ git push

Enter passphrase for key '/c/Users/mylaptop/.ssh/id_rsa':
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'git@github.com:user_name/foo_bar.git'

正如我从railstutorial.org上了解到的,我知道如果我第一次使用“git push”,它将返回一个错误,期望我指定“origin master”参数。但是对于下一次和后来的时间,我只能启动“git push”,它会优雅地为我工作。这是什么原因?因为我认为默认情况下命令总是指分支'master'。

任何明确的解释都会非常感激。

3 个答案:

答案 0 :(得分:5)

第一次执行git push时,没有名为master on origin的远程分支。

分支存在后,您可以使用git push,它将链接到远程分支,其名称与您当前所在分支的名称相同。

答案 1 :(得分:1)

Git存储库具有“跟踪”这一概念。因此,从git的角度来看,它可以知道主分支正在跟踪origin / master。如果它在你git push时看到了这种关系,那就说“哦,他正在从主人那里推动,跟踪起源/主人。这一定是他们想去的地方。”

然而,在你第一次推送之前 - git不知道这种关系,这意味着你的命令(可能)含糊不清。您可以在Git Book's Chapter on Tracking

中阅读有关此行为的官方文档

注意:请参阅以下Jefromi的评论。他指出我的解释中的一些不准确之处可能很重要,具体取决于您的使用案例。

答案 2 :(得分:1)

git push origin的默认行为是发送到originorigin上的分支同名的所有本地分支。

如果在未指定git push的情况下键入origin,则会从您所在分支跟踪的远程分支推断出目标存储库的名称。因此,如果您在分支master跟踪origin/mastergit pushgit push origin类似。