当使用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
提交记录将被移除。