讲完了笔记怎么拆解,这篇来说说版本管理。三保险备份方案解决的是「硬盘坏了怎么办」的问题。但更常见的场景是:改错了想撤回,删了重要文件想找回来。备份恢复一次,代价挺大的。
Git 就是为这个场景准备的。不是备份的替代品,是一道更细粒度的保险——能回到任意一个历史版本。
为什么需要 Git
Obsidian 自带文件恢复,它只保存最近改动。跨设备同步后不一定会保留历史。备份可以恢复整份数据,但不能恢复昨天下午 3 点的状态。
Git 填补了这个空白。
每次提交记录一个完整快照。想回哪个版本都行。而且只存差异,不是整份复制。
初始化
把整个 vault 变成 Git 仓库,两条命令:
cd /path/to/your/vault
git init
这会在 vault 根目录创建一个 .git 目录,放所有版本信息。但有个问题——图片。几万张甚至十几万张图片,24GB 全放进 Git,每次操作都很慢。
所以需要 .gitignore。
最核心一条是 assets 目录。如果图片单独放在 /data/Obsidian-assets/ 下:
assets/
.obsidian/
.trash/
.stversions/
.DS_Store
.obsidian 放的是插件配置和主题,不该进版本控制。.trash 和 .stversions 分别是 Obsidian 的回收站和 Syncthing 的备份目录。
只把 .md 文件纳入版本管理。一万篇 Markdown 文件,Git 第一次提交大概几十 MB。之后每次只存差异,一次日常提交只有几百 KB。
提交频率
不需要像写代码那么严格。两条原则就够了。
第一,每天至少一次。晚上统一提交:
git add -A
git commit -m "2026-07-15 日常更新:3 篇新笔记,2 篇修改"
第二,重要操作前后单独提交。要大范围改标签、批量移动文件,操作前来一次,操作后又来一次。出了岔子直接回滚。
回滚
这是最有用的功能。某天批量改了 50 篇笔记的标签,发现改错了,想全部撤回。
查看历史:
git log --oneline
找到操作前那次的 commit hash:
git checkout HASH -- .
所有文件恢复到那个时间点的状态。如果只恢复某个文件,把 dot 换成文件路径。
想看看某个历史版本长什么样:
git log -p
比较两个版本之间的变化:
git diff HASH1 HASH2
分支:试错区
Git 的分支功能被低估了。它是一个零成本的试错区。
想尝试新的标签体系,又怕搞乱了现有结构。开个分支:
git checkout -b new-tag-system
在这个分支上随便改。改满意了,合并回主分支:
git checkout main
git merge new-tag-system
改不满意,直接删掉:
git branch -D new-tag-system
主分支完好无损。这个模式在做知识库大重构时特别有用。
远程仓库(可选)
如果想把 Git 历史再备份一份到远程:
git remote add origin [email protected]:yourname/your-vault.git
git push -u origin main
这样就有了版本管理加异地备份的双保险。本地硬盘出了问题,远程仓库还有完整的历史。
推送到远程时,注意敏感信息。如果 vault 里有账号密码目录,确保 .gitignore 已经排除。
一条命令日常提交
每天手动写三条命令有点麻烦。写个简单的脚本:
#!/bin/bash
cd /path/to/your/vault
git add -A
git commit -m "$(date '+%Y-%m-%d') 日常更新"
保存为 auto-commit.sh,每天跑一次。一行代码完成一次提交。
前几篇讲了备份、批量操作、多设备同步。Git 版本管理算是把这个空白补上了。有了 Git,知识库才算真正有了后悔药。