2012-04-05 76 views
2

我推一些改變,我們的中央git倉庫,然後立刻意識到我有一箇舊的,現在已經過時了變化躺在四周,我已經介紹了與它合併:rebase之後推出新的歷史?

before

然後我用git的變基擺脫這種虛假父:

after

然後我把這個與git push -f原點。它回答「一切都是最新的」。

現在我希望中央資料庫能夠與我在本地進行的配對相匹配。但是,當我再次登錄該項目時,我仍然有虛假的父母。更糟糕的是,git想要合併,如果我讓它這樣做,我會得到最新的提交兩次(一次是舊哈希,一次是重新綁定後的新哈希)。

如何讓git推送我沒有合併的東西,並將我的存儲庫狀態作爲新的狀態(因此基本上拒絕所有遠程差異)?

還是我做錯了?我想擺脫「閱讀財產......」提交時,以及上方圖像中的整個紅線。

回答

1

你可以用各種方法解決這個問題。一種方法是通過使用重置,存儲和提交在本地重建歷史記錄。以下操作將取消最後一次提交(初始導入...)並保存這些更改。

git reset --mixed HEAD^ 
git stash 

現在,您可以將主重置提交你有你沒有在合併之前,假設ABCD1234是的哈希值「測試飯桶。」承諾:

git reset --hard abcd1234 

現在帶回藏匿,並再次提交它:

git stash pop 
git add . 
git commit -m 'Initial import of the C++ client library.' 

現在終於推了你重寫主:

git push -f origin master 
+0

謝謝,它的工作!不知道'藏匿'。我還必須更改'receive.denyNonFastForwards'來讓它接受推送(http://stackoverflow.com/a/1377930/143091)。 – jdm 2012-04-06 12:09:14

+0

快樂爲你服務! :) – ralphtheninja 2012-04-06 14:43:58

+0

這就是爲什麼你的第一次推動沒有工作後,你做了rebase。說得通。 – ralphtheninja 2012-04-06 14:47:03