2011-11-06 196 views
2

我试图将我的源代码部署到Github上。 然后,我首先加入GitHub的源到远程源如下:需要解释“git push”命令的工作原理

$ git remote add origin [email protected]:user_name/foo_bar.git* 

然后,我试图运行“GIT中推”命令,如下我的源代码上载至我的远程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 '[email protected]:user_name/foo_bar.git' 

当我从railstutorial.org了解到,我知道如果我使用“混帐推”的第一次,它会返回一个错误期待我来指定“主产地”参数。但是对于未来和未来的时代,我只能开启“git push”,它会为我优雅地工作。这是什么原因?因为我认为命令默认总是指分支的“主”。

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

回答

5

您第一次做git push时,没有远程分支称为主源。

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

1

Git存储库有这个“跟踪”的概念。所以,从git的角度来看,它可以知道master分支正在跟踪origin/master。如果在你做git push时看到这种关系,那么它会说:“噢,他是从主人那里推动的,它跟踪起源/主人,这一定是它要去的地方。”

但是,在你第一次推 - git不知道这种关系,这意味着你的命令是(可能)模糊。您可以在Git Book's Chapter on Tracking中阅读有关此行为的官方文档。

注意:请参阅下面的Jefromi评论。他在我的解释中指出了一些不准确的地方,这可能很重要,这取决于你的用例。

+3

这是不正确的,Git书中的这段话也有点误导。 (我认为它试图简单地说,不会泄露虚假信息,但仍然是)。默认情况下,'git-push'会推到同名的分支,完全忽略跟踪分支。如果您希望它使用跟踪分支,则必须将'push.default'设置为'tracking'。但在正常情况下,一切都将正常工作 - 所有分支机构都会跟踪同名分支机构,避免意外推送个人本地分支机构,因为它们不在远程位置。 – Cascabel

+0

嘎,你是对的。我一直在使用git大约9个月,成功地建立了两个私人git服务器 - 我仍然有东西要学。这就是人生。感谢您的评论! :) –

+0

哎呀! S /简单/简化/ – Cascabel

1

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

如果没有指定origin键入git push,目标资源库的名称是从由分支你是在跟踪的远程分支推断。因此,如果您在分支master跟踪origin/master,git push类似于git push origin