2011-04-02 47 views
1

我的git倉庫(編輯過的文件來自「main」倉庫)出錯了,我不得不使用「git push -f」來強制我的「主」倉庫接受我的本地修訂。我回到我的遠程主存儲庫,並做了一個git狀態。Git:爲什麼我看到以前承諾的更改?

我看到要提交的更改是舊的,並不反映我實際的本地存儲庫狀態(推入-f)。所以,如果我在main上做了一個git commit,它可以正常工作,但是這兩個版本庫不同。

的情況下不了決心,因爲一個新的標準混帳推顯示了一個錯誤:

! [rejected]  master -> master (non-fast-forward) 

怎麼可以這樣解決,使我的主要回購協議具有相同的內容,我的本地副本?

回答

2

您通常不應該將git push添加到非裸存儲庫,即具有附加工作副本的存儲庫。原因是git push並沒有更新工作目錄(它不能可靠地這樣做),因此HEAD與其分支不同步,或者與其工作副本不同步。

如果您想要推送到某個存儲庫,請將其作爲裸存儲庫而不使用工作副本。否則,請使用fetchpull來獲取對存儲庫的更改(在此存儲庫本身使用)。

+0

我以前是一個顛覆用戶,並沒有太多的經驗與混帳,這就是爲什麼我犯了這個錯誤。問題是我創建了一個遠程倉庫,這是我的主要倉庫,從我的git init代碼副本中獲得。你認爲我應該重新創建我的遠程服務器中的存儲庫嗎?讓它成爲一個裸露的?順便說一句,一個裸機如何工作?它有一個跟蹤文件更改的內部數據庫,但不允許直接編輯它們? – Spyros 2011-04-02 18:52:43

+0

一個「裸倉庫」是你在svn中簡單地調用一個倉庫的東西 - 也就是坐在服務器上的東西(當然太簡單了)。非基礎倉庫用於您的工作副本(但在git中它們也包含整個歷史記錄)。 – 2011-04-02 18:58:55

+0

如果您現在擁有本地存儲庫中的所有代碼(包括所有修訂版本),則可以使用'git clone --bare'(如果您可以從那裏訪問本地存儲庫)重新創建您的「主要」代碼。否則,執行一個新的'git init --bare',然後使用你本地的'git push'。 – 2011-04-02 19:02:12