我有一個 git repo,我在大約 1 1/2 年前通過創建一個為我創建提交的機器人進行了測驗。我剛剛學習了 git,我想通過數千次提交來看起來很酷。
本質上,我所做的是我創建了一個機器人,它在檔案中添加一行,添加它,提交它,然后推送它。因此,大約 54000 次以上的提交毫無價值。我將如何洗掉所有這些提交?這是一個好主意嗎?
沒有價值的提交,也就是我想要洗掉的提交,位于中間,從 開始到0c4068fb3結束42b8fae4b。所以,合法的提交是 before0c4068fb3和 after 42b8fae4b。沒有價值的提交很容易被檢測到。原因是,當我創建我的機器人時,我使用了我擁有的所有提交訊息,并將它們放在一個串列中,機器人將從串列中隨機選擇,并將其用作其提交訊息。因此,任何重復多次的提交都是沒有價值的提交。此外,大多數沒有價值的提交也會說first commit,或類似的東西。
所以,這里是假的開始的提交部分的鏈接。如您所知,提交訊息不斷重復。
虛假提交中的實際內容只是一個名為bot.txt. 因此,這些提交沒有任何價值。
如果沒有,你能告訴我如何洗掉所有 54000 多個提交并保留那些真正有價值的提交嗎?
謝謝
uj5u.com熱心網友回復:
更新:在您的特定情況下,由于您希望洗掉的所有提交都寫入名為 的檔案bot.txt,并且您希望保留的提交都不寫入該檔案,因此最簡單的操作程序是使用git-filter-repo洗掉該單個檔案從整個歷史來看。僅涉及該檔案的任何提交都將退出新的重寫存盤庫。結果將是沒有那些 54K 提交的類似 repo。
上一個答案:請注意,這個答案可能仍然對您有用,但正如所寫的,下面的答案旨在更廣泛地適用于線性歷史。--rebase-merges通過在下面的最終命令中添加選項rebase,您仍然可以在非線性歷史上實作您的目標。請注意,這里的主要區別是 54K 提交將被壓縮為一個提交,如果這包括在最后一次提交中創建并最終洗掉檔案,那么最終將創建一個不屬于 repo 的提交。
根據評論中的一些資訊:
TTT 問:
對于“真正有價值的”,它們在歷史圖表中的位置是什么?例如,54k 之前的一些好的提交,54k 中混合的一些好的提交,54k 之后的一些好的提交?
你回答:
沒有價值的提交在中間,從 0c4068fb3 開始,到 42b8fae4b 結束。所以所有有價值的提交都在 0c4068fb3 之前和 42b8fae4b 之后
如果您的歷史是線性的,那么使用 squash 方法是直接的,我可以向您保證不會有沖突。
# Let's assume you are rewriting branch: master
# Back it up for sanity purposes
git branch master-backup master
# create a new branch
git switch -c temp-branch 42b8fae4b # start a branch from last "bad" commit
git reset --soft 0c4068fb3~1 # reset back to commit before first "bad" commit
# Note right now you have only "good" commits on your branch,
# and all "bad" commit changes are staged, let's make 1 big commit
git commit -m "Squash all automated commits into one"
# now rebase the remaining commits on master
git rebase 42b8fae4b master --onto temp-branch
請注意,洗掉錯誤提交而不是壓縮也相當簡單,但你不能保證不會有沖突(除非你碰巧知道不會有沖突)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/480924.html
