[英]Squash master branch history but keep all prior commit messages in blame?
我一直在研究git南瓜,但是不確定它是否適用於我嘗試做的事情。 我只知道git的基礎,所以也許這是一件荒謬的事情。
我有一個主分支,可以說有10,000次提交。 讓我們假設它看起來像這樣:
1-2-3...5000...9999-10000
假設倉庫中的所有文件在某些時間點已被修改。 例如,“ test.php”文件的提交值為1,2,3,2500,6000
。
現在,我要做的是使master分支的整個歷史記錄始於commit 5000,但保持提交日志不變? 這有可能嗎?
例如,將責任歸咎於“ test.php”:
<commit 1> | echo 'hello world';
<commit 2> | echo 'another line in the file';
<commit 6000> | echo 'sometime later';
我對為什么要這樣做的想法很簡單。 在這一點上,我將永遠不會回退超過commit 5000的代碼,但是很高興看到誰進行了更改。 這也將減小結帳的大小,這在當時非常大。
當從提交歷史記錄注釋源文件中的行時,Git會獲取顯示的信息。 因此,如果您刪除了部分提交歷史記錄,那么該信息將不再適用於git。
僅僅因為您不想在進行某些提交之前就回滾並不是放棄歷史的原因。 保留它還有更多的原因, git annotate
只是其中之一。
因此,您要解決的唯一問題似乎是克隆時需要傳輸的數據量。 您可以通過使用--depth
選項對git clone
創建淺表克隆來減少這種情況。 這樣,歷史記錄仍將在某些遠程服務器上可用,但是您可以選擇要復制到克隆中的歷史記錄數量。
淺表克隆也是確定通過壓縮歷史記錄可以節省多少空間的好方法。 請注意,-- --depth
通過兩種不同的方式節省空間:它僅克隆遠程當前指向的單個分支HEAD
,並且僅將該分支克隆到特定深度。 您還可以使用--no-single-branch
選項來獲得更多可比較的數字,以判斷是否值得擠壓歷史記錄。 多數情況並非如此。
要在本地測試--depth
的效果,您可以
git clone --no-local --no-hardlinks --no-single-branch --depth 100 path/to/repository path/to/clone
這將創建本地存儲庫的淺表克隆,同時覆蓋通常的本地優化。 然后,您可以使用
du -sm path/to/repository
du -sm path/to/clone
壓縮提交將重寫歷史記錄, 您將是做出更改的人,而您將是受到指責的人。 如果有一千個人進行了更改,而一個人決定將所有這些更改壓縮為一個大更改,那么誰做了那個大更改? 壓榨一切的人。 Git忘記了其他更改,因為歷史被重寫了。
換句話說,這是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.