给定存储库,我想删除特定提交之前的所有提交或历史记录中的日期.
我的存储库中有大约10000个提交,我想只保留最后1000个左右,并删除其余的.基本上我想要做的就是移动第一前进承诺X.
起初我以为我可以将所有这些提交重新绑定并压缩成一个,但这会在rebase期间导致很多合并冲突.如果有一种方法来压缩提交,使得壁球之后的版本是最后一次提交,那也是有用的.
Bri*_*ell 19
警告:以下内容很危险,因为它会重写历史记录.在进行任何类似的重大历史重写之前,请务必确保备份您的仓库.
将以下散列替换为您希望作为新的第一次提交的提交的父级的哈希.
git filter-branch --parent-filter '
read parent
if [ "$parent" = "-p 5bdd44e5919cb0a95a9924817529cd7c980f88b5" ]
then
echo
else
echo "$parent"
fi'
Run Code Online (Sandbox Code Playgroud)
这会重写每个提交的父母; 对于大多数提交,它使它们保持相同,但是父项与给定的哈希匹配,它将替换为空父项,这意味着它现在将成为没有父项的提交.这将分离你所有的旧历史.
请注意,如果您希望第一次提交的是合并提交,则需要以-p parent1 -p parent2 -p parent3正确的顺序匹配合并提交的每个父项.
如果要将其应用于所有分支和标记而不是仅应用于当前分支,请在--all命令末尾(脚本之后)传入.
完成此操作并检查它是否正常工作后,您可以删除原始分支并运行a gc以清除现在未引用的提交:
git update-ref -d refs/original/refs/heads/master
Run Code Online (Sandbox Code Playgroud)
请注意,由于git倾向于尝试保留数据,为了实际释放空间,您还必须从reflog中删除提交,然后运行gc以清理它.
git reflog expire --expire-unreachable=all --all
git gc --prune=all
Run Code Online (Sandbox Code Playgroud)
如果你不是为了节省空间或根除旧提交,你可以将旧历史保存在一个分支中,例如git branch old-master refs/original/refs/heads/master; 您甚至可以"虚拟地重新连接"它git replace,此时您将有两个未连接的历史记录(因此当您推送到远程仓库时,您只会推送截断的历史记录)但是当您查看本地仓库中的历史记录时,您将看到完整的历史.
对我来说更简单的是使用git replace(编辑:成功测试!).
首先将你想要的所有提交压缩成一个:(我们将调用你想要压缩的最后一次提交的sha和第一次提交的sha,所以你的root提交)
git checkout -b big_squash <LastSha>
git reset --soft <RootSha>
git commit --amend -m "My new root"
Run Code Online (Sandbox Code Playgroud)
现在,你必须让你的分支big_squash指向一个新的根(在这里调用<NewRootSha>.我们在这里只是对sha1感兴趣,一旦你成功完成操作,分支就可以删除了).
那么你有两种可能性:
git rebase --onto如果它很容易完成,那么稍后提交一个(这是git book的首选解决方案,但是在成功测试其他解决方案之后,那不是我的;))git replace来掩盖旧的历史(历史仍然在仓库中!但是,我们将使其永久使用git filter-branch)要替换最后一次使用新创建的提交压缩的提交:
git replace <RootSha> <NewRootSha>
Run Code Online (Sandbox Code Playgroud)
现在,你可以做一个git filter-branch后git replace使其永久!
更换后,执行:
git filter-branch master, <put here the name of all your branches>
Run Code Online (Sandbox Code Playgroud)
如果结果适合您,则删除文件夹.git/refs/original(其中包含之前保存的所有参考git filter-branch文件)和文件夹.git/refs/replace(包含您不再需要的替换文件).
此解决方案的优点是简单且可恢复(除了删除文件夹后的最后一步;))
那已经完成了!
你可以在这里找到文档:
git replace got smarter)| 归档时间: |
|
| 查看次数: |
7937 次 |
| 最近记录: |