2017-02-08 53 views
3

我犯了一個愚蠢的錯誤,我不知道解決它的最好方法。以下是我所做的:壁球上的數百個舊提交

  • 基於樣板創建了一個Web項目。
  • git的刪除,以使我的初始提交
  • 幾個月和我自己的項目約200犯下後來,我合併上游樣板分支到我的項目的本地分支之前刪除所有的歷史(約500提交)。這增加了來自上游樣板的約500多個提交。
  • 額外增加了10或者在當地分公司,使承諾得到我的項目,從樣板更新再次合作
  • 合併工作的本地分支到推動發展分支原產我的開發分支
  • 創建一個更致力於對當地發展分支(不推到原點)
  • 創造了大約一打的還沒有被合併到其他開發當地分支機構(不推到原點)

我的Git修訂歷史現在已經有了我第一次提交項目之前的所有樣板歷史,我最初已經刪除了它。它在我的提交中間也有數百個提交。

我想要做的是壓縮合並中的所有內容,從上游到我用於單個提交的本地分支。有沒有一種無痛的方式來做到這一點?

此外,我還需要重寫原點的歷史記錄。這是一個私人回購,只有一些人正在使用它。我該怎麼做呢?

+3

爲什麼人們這樣做是爲了自己? –

+1

@JoePhillips偉大的問題!就我而言,我計劃在合併開發之前壓縮我的本地分支。但其他人需要立即做出一些改變,我不知道如何做南瓜。所以我合併了它的方式,認爲我可以在之後處理它。當然,其他的東西是優先考慮的,所以我現在正在努力清理我自己製作的這些爛攤子。 – Tauren

+0

我完全反對南瓜,所以我想我真的不認爲這是一個混亂 –

回答

2

我想要做的是壓縮合並中的所有內容,從上游到我用於單個提交的本地分支。有沒有一種無痛的方式來做到這一點?

使用您的回購兩個本地克隆:

  • 於一身,你檢出要壁球(如您的上游合併提交SHA1)中的其他
  • 的各種狀態,你做一個git的復位 - 硬到第一次提交這在當時還是正確的(即在歷史上是好的)

然後,從第二個,你可以git --work-tree=/path/to/first/clone add .一切從第一,並提交。

重複第一個回購的各種狀態,你想壓縮成一個提交(通過添加第一個回購的工作樹和提交在第二回購實現)。

然後git push --force

+0

謝謝,這個伎倆!其實,我只做了一次,沒有重複。我沒有重複,而是挑選了最近的提交。這確實丟失了一些數據,比如原始提交日期和他們所在的分支,但我並不太在意。 – Tauren