2011-11-06 112 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