我有一个git,我做了测试,通过创建一个机器人,为我创建了大约1.5年前提交。我只是在学习git,我想通过数千次提交来看上去很酷。
本质上,我所做的是创建一个机器人,它将一行添加到文件中,添加,提交,然后推送它。所以,关于54000+提交是毫无价值的。我将如何删除所有这些提交?这是个好主意吗
没有值的提交(也就是我想要删除的提交)位于中间,从0c4068fb3开始,以42b8fae4b结束。因此,合法提交是在0c4068fb3之前和42b8fae4b之后。不具有价值的提交很容易检测到。原因是,当我创建我的机器人时,我使用了我拥有的所有提交消息,并将它们放在一个列表中,机器人会随机地从中选择这些消息,并将其用于提交消息。因此,任何重复多次提交都是没有值的提交。而且,大多数没有价值的提交也会说first commit,或者类似的东西。
因此,下面是指向提交部分的链接是假的开始部分。如您所知,提交消息不断重复。
假提交中的实际内容只是增加到一个名为bot.txt的文件的一行。所以,这些承诺中没有任何有价值的东西。
如果没有,您能告诉我如何删除所有的54000+提交并保留那些真正有价值的提交吗?
谢谢
发布于 2022-05-20 17:07:47
Update:在您的特殊情况下,由于您希望删除的所有提交都是写入一个名为bot.txt的文件,并且您不希望继续写入该文件,所以最简单的操作过程是使用git-filter-repo从整个历史记录中删除该单个文件。任何只触及该文件的提交都将从新重写的回购中删除。结果将是一个类似的回购没有那些54K提交。
以前的答案:注意到这个答案可能仍然适用于你,但正如所写的,下面的答案是为了在线性历史上更一般的意义上工作。通过将选项--rebase-merges添加到下面的最终rebase命令中,您可能仍然能够在非线性历史上完成您的目标。注意,这里的主要区别是54K提交将被压缩为一个提交,如果其中包括在最后一个提交中创建并最终删除文件,则最终将创建一个退出repo的提交。
根据评论中提供的一些信息:
对于“真正有价值的那些”,它们在历史图中的位置呢?例如,一些好的提交之前54k,一些好提交与54k混合,一些好提交后54k?
没有值的提交处于中间,从0c4068fb3开始,以42b8fae4b结束。因此,所有具有值的提交都在0c4068fb3之前和42b8fae4b之后。
,如果你的历史是线性的,这是直接使用南瓜方法,我可以保证不会有冲突。
# 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://stackoverflow.com/questions/72322010
复制相似问题