簡體   English   中英

壓榨master分支的歷史記錄,但將所有先前的提交消息歸咎於此?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM