当使用Git作为Obsidian的版本管理工具时,往往会产生非常多的提交记录,这会大大增加仓库负担。
在具有上百条提交记录后,需要使用一定方法来清理过时的提交,可以参考以下步骤实现。该方法可以实现清除特定某次提交之前的提交记录。
务必在尝试操作前,备份完整仓库!!!
-
使用
git log查找你想要保留的最近一次提交的哈希值(例如,<commit-hash>)。 -
使用
git checkout --orphan temp-branch创建一个新的分支,且该分支没有任何提交历史。 -
使用
git add .和git commit -m "Clean old commit"提交当前的工作目录。 -
使用
git rebase --onto temp-branch <commit-hash> master将master分支<commit-hash>后的所有提交应用到temp-branch上,并将master分支变基到当前最新的temp-branch提交记录上。此处仅保留
<commit-hash>后的提交记录。具体请参见文末的举例解释。 -
使用
git branch -d temp-branch删除临时的 orphan 分支。 -
使用
git push --force强制推送到远程仓库。
这样就完成了过时提交记录的清除操作。
第4步骤较为复杂,可能产生误解,因此以下特别为其做举例说明。
假设原
master分支是A---B---C---D---E---F---G,选中的<commit-hash>是C记录对应的哈希值。执行
git commit -m "Clean old commit",这会在temp-branch上创建一个新的提交,假设这个提交的哈希值为H。执行
git rebase --onto temp-branch <commit-hash> master,这会将master分支C后的所有提交(即D---E---F---G)应用到temp-branch上,并将master分支变基到当前最新的temp-branch提交记录上。结果如下:HEAD -> master: H---D'---E'---F'---G'
D',E',F',G'是重新应用后的提交,哈希值会不同于原来的D,E,F,G这样
master分支的提交历史会变成:
H---D'---E'---F'---G'原来的
A---B---C提交记录将被移除。