2011-08-21 54 views
3

我使用Linonde來託管我的git回購站和實際站點文件。在本地和服務器上處理多個Git頭部

的Git分支-r看起來是這樣的:

company/master 
company/stage 
origin/HEAD -> origin/master 
origin/master 
prod/master 

的Git分支看起來是這樣的:

master 
stage 

我想,我想簡單地擁有我的局域級分支點到我的公司/掌握頭腦。當我做一個git push company stage它似乎更新我的舞臺頭在服務器上,但我試圖讓它更新主站頭,這是我的網站似乎爲其服務的文件。或者我需要弄清楚如何將我的網站指向公司/舞臺主管。

我想刪除我的分支,使一個與

git branch stage company/master 

,因爲我以爲起點可能是我所需要的。

認沽當我嘗試後推我得到的消息:

error: failed to push some refs to '[email protected]:~repos/project_name' 
To Prevent you from losing history, non-fasst-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again.) 

我嘗試了git pull,但它所說的一切是最新的,我看不出在快速前進的幫助文檔什麼解決我的情況。

回答

6

首先,這是值得說明的是,當你這樣做會發生什麼:

git push company stage 

最後一個參數是有一個真正的refspec,它定義了源ref和目的地裁判之間的映射 - 在簡單的情況下,你'可能會處理,這些「裁判」是分支名稱。如果refspec中沒有:,則假定您要推送到同名的分支。所以,你運行該命令等同於:相反,如果你想以更新company庫中的master分支

git push company stage:stage 

,那麼你需要做的:

git push company stage:master 

移動的,當你刪除你的分支,並重新創建它:

git branch stage company/master 

...那CR在您的git配置中使用條目,將您的本地分支stage與存儲庫company中的分支master相關聯。 ¹這意味着如果您在分支stage上,則運行git pull應該做正確的事情,在這種情況下,將更新遠程跟蹤分支company/master,並將其合併到stage

不幸的是(並且令人困惑)這些配置選項不會(默認情況下)影響git push的行爲,這是我wrote about in some detail elsewhere。你不提的git push命令,你再使用的形式,但你應該做的事情:

git push company stage:master 

...如果你想與您當地的分公司stage更新在company庫中的master分支。 (如果你只是嘗試git push company,它會嘗試推送本地存儲庫和company之間的每個「匹配」分支,其中「匹配」表示「本地和遠程存在同名分支」。可以通過設置push.default配置選項tracking。)


¹在早期版本的Git,你將不得不添加--track參數,但是對於已經默認了一會兒,其中起點是遠程跟蹤分支。

+0

+1尼斯答案馬克。當我看到這件事時,我正在發佈答案。我更喜歡你的答案,所以我甚至都沒有繼續打擾。 :) – Gerry

+0

雖然你可能想要搜索並替換eschaton – Gerry

+1

謝謝,格里 - 我已經做到了。 –