2013-02-01 70 views
0

我有一個光禿禿的git存儲庫,我用它來在Linux機器上推拉(我們稱之爲裸機git存儲庫遠程originlinux)。從我的工作存儲庫,有originlinux作爲遠程我推,直到最後我決定把它放在github上。我在他們的web gui上添加了github倉庫,並使用git remote add命令,然後git pull --rebase,然後git push(在push之前拉動,因爲我沒有被允許只是簡單地將它添加到我的工作倉庫中(我們稱之爲遠程origingithubub)推送到一個新創建的github倉庫中,但沒有得到這些:'提示:更新被拒絕是因爲當前分支的提示位於'後面',我認爲這與他們選擇創建自述文件有關。在執行這些步驟之後,問題是,儘管存儲庫具有完全相同的提交併被推送到同一個確切的工作存儲庫,但存儲庫完全不與同步存儲庫同步。有人可以請詳細解釋爲什麼會發生這種情況,以及我可以採取什麼不同的方式來防止這種情況發生,而不必重新排序我如何創建遠程存儲庫?看起來,我使用的工作流程或操作順序在git land中沒有意義,但是如何保持多個遠程存儲庫同步在一個工作副本上?與多個遙控器和操作順序的git工作流程

謝謝!

回答

1

兩個存儲庫做不是具有相同的提交。

當您執行git pull --rebase時,您重寫了項目的整個歷史記錄,以便每個修訂包含該自述文件。因此,歷史記錄中的每個提交都會有不同的SHA1標識符。

有幾種方法可以從中恢復。

首先,您可以恢復本地存儲庫的狀態以匹配狀態或第一個(非github)遠程。這將消除您在github上創建的自述文件(如果需要,您可以將其複製到其他位置並在稍後將其添加到git中)以及未推送到第一個遠程的任何更改(包括更改沒有被提交)。

git reset --hard originlinux/master 
git push -f origingithub 

-f選項有使推被迫即使是刪除一些提交。這是一般應該避免的情況,但在這種情況下有時是必要的。

另一種方法是僅對第一個遙控器進行強制推送,接受由rebase引起的新歷史記錄。

git push -f originlinux 

如果您提到的三個存儲庫是唯一的存儲庫,那麼使用這些方法中的哪一個應該沒有關係。如果還有其他存儲庫,您可能需要嘗試確定哪個版本的歷史記錄更廣爲人知,並保留該版本。