2012-10-12 204 views
3

我創建了一個遠程倉庫的本地副本。由於一些舊的錯誤提交數據導致麻煩,我不得不重寫(過濾分支)本地回購歷史記錄。所以現在我有一個遠程回購的克隆,除了提交哈希都是不同的。沒有歷史的Git pull

有沒有辦法讓本地回購協議仍然可以與遠程協同工作,以便從中提取未來的提交?它永遠不會推動,這不是一個問題。如果我運行git pull,它會嘗試將其全部原始歷史記錄拉出來,這是不需要的,並且會重新破壞本地回購。

+0

因此,這是錯誤的提交數據,並且您仍然希望從上游接收更新,但是您*不希望推送「良好」提交數據?你能解釋一下你的情況嗎?是什麼讓歷史如此糟糕以至於如果你從不推動,你需要重寫它? –

+0

我不控制遠程回購,它是一個公共項目。維護它的人不希望由於某種原因修復不良歷史。當我想將項目推送到新的遠程設備時,這些無效的名稱/電子郵件會導致一些舊的提交出現問題。 – Ryan

+0

對過時的名稱/電子郵件的適當迴應是使用郵件地圖文件,而不是僞造歷史記錄。如果你能提供幫助,歷史應該永遠不會被重寫。 –

回答

2

如果你關心的只是拉動,那麼是的。你可以做的是獲取遠程倉庫。然後確定遠程回購中與您最新的本地提交相匹配的提交。然後將該遠程提交合併到本地,並使用-s ours標誌(設置ours策略)。這將產生一個將兩個歷史記錄連接在一起的合併提交,同時只使用本地歷史記錄中的樹(因此沒有合併衝突)。

通過此合併,您現在可以安全地從遠程存儲庫中獲取git pull,並且它只會嘗試合併提交中比您剛創建的虛擬合併更新的提交。

請注意,您仍然必須保留遠程回購的整個歷史記錄,並且可以將其作爲您的虛擬合併的第二個父級訪問。但它不會影響你的本地樹。

+0

感謝您的信息。你能解釋一下實際的合併過程/命令嗎?在git中不是很有經驗,從來沒有像這樣合併過。 – Ryan

+0

@Ryan:一旦你確定了遠程提交符合你最新的本地提交,就像'git merge -s我們的$ SHA1'(其中'$ SHA1'是遠程提交)一樣簡單。 –

+0

謝謝你的信息:)你提到,遠程回購的歷史將不得不作爲第二個父母。這是否意味着我仍然無法將我的重寫/合併本地推到我自己的遙控器上? – Ryan