2012-06-22 68 views
4

我在任何地方都能看到重寫已發佈的提交歷史很糟糕,並會「破壞」其他開發人員的存儲庫。當你重寫公共分支的歷史時會發生什麼?

我一直無法找到關於究竟會發生什麼的細節,以及如何修復它。

因此,如果我要重寫歷史記錄和git push --force,我應該告訴其他開發人員如何才能使其更新?

+2

您告訴他們重新克隆存儲庫,他們必須手動複製並粘貼他們所做的更改。 – flumpb

+0

你是認真的嗎? –

+0

@kisplit複製和粘貼是有點苛刻,取決於您可能能夠將補丁導出爲補丁並重新應用它們的更改。 – R0MANARMY

回答

3

這可能是我見過的最好的解釋:http://git-scm.com/book/ch3-6.html#The-Perils-of-Rebasing

簡短的回答是,其他開發商會拉下修改後的公共倉庫,並嘗試與他們目前的工作,適當合併這些變化。因爲最近的祖先可能已經改變了這種合併可能很複雜並且可能需要手動執行。一個粗略的例子如下:

開發者A做了幾次提交併將它們推送到服務器。開發人員B然後將這些提交合併到他們的本地分支(或從那些提交中的潛在分支)。開發人員A決定重新提交他們的舊提交併將結果推送到服務器。

這會有效地從開發人員B正在使用的服務器中刪除提交,並用大部分相同的提交與不同的標識符進行替換。

現在,如果開發人員B再次從服務器拉下來,他們需要將後重建提交合併到他們的工作中,有效地合併兩次相同的更改。

如果開發者A在rebase進程中移除了提交或修改的提交,那麼開發者B有一個更復雜的合併來處理。

相關問題