我有兩個存儲庫,A
和B
。我想將A
中的所有文件及其歷史記錄的子集複製到B
。 B
有它自己的歷史記錄,我也想保留它;它不是一個新的,新的儲存庫。如何在git中從另一個倉庫提取一系列提交?
你看,A
有28,000個提交。除了最近的30個左右外,我都不在乎。爲了簡單討論,假設我對#1至#27,970的提交不感興趣,但我想保留提交#27,971至#28,000的歷史記錄。
我試過兩種不同的方法。
- 壁球通過#27970提交提交的#1,
A
(使用git rebase -i
)成一個單一的提交,然後git pull
A
成B
。我在這裏碰到的麻煩是在A
重新綁定期間,git無法應用某些提交的錯誤很多。我不太瞭解A
中的這些提交,所以我無法修復它們。 (另外,它採取了一種長時間來執行變基 - 多小時,我還沒有完成)的A
- 下載的快照(即,沒有歷史)在提交#27970,並放置在
B
,併爲新鮮文件做一個git add
和git commit
。然後從A
(使用git format-patch
)爲第27,971到第28,000號提交創建補丁,並將該補丁應用於B
。這一切似乎工作正常,除了它沒有維護給定文件的提交歷史。也就是說,在應用修補程序後,似乎所有30次提交的更改都立即發生:歷史記錄未保留。
有一個簡單的方法可以做到這一點!
我可以想出許多不同的方法來做你想做的事情,但我會用第一個最簡單的方法來回答我的頭。另外,你是否基本上只想創建一個新的'B',它是'A'的克隆,但是隻有最近的30次提交? –
@Cupcake我編輯了我的問題:'B'有它自己的文件;它不是一個新的回購。 – stepthom
'B'包含什麼樣的文件,它們與'A'中的文件有什麼關係?如果它們是相同的文件但共享不同的歷史記錄(就像您在重新綁定後會得到的內容一樣),那麼當您將文件從'A'合併到'B'時,您不會感到驚訝。要非常小心你如何解決這些衝突。 –