Git 文档隔离管理
快速开始
5 分钟上手
1. 验证 main 分支干净
git log main -- docs/ # 应返回空
2. 创建孤立 docs 分支
git checkout --orphan docs git rm -rf . mkdir docs && echo "# Dev Guide" > docs/guide.md git add docs/ && git commit -m "chore(docs): init"
3. 回到 main,开始使用
git checkout main
日常使用(每次开发)
获取文档进行开发
git checkout -b feat-xxx git archive docs docs/ | tar -x -C . echo "docs/" >> .git/info/exclude
开发完成后
git add src/ && git commit -m "feat: xxx" git checkout main && git merge feat-xxx rm -rf docs/
任务目标
-
本 Skill 用于: 管理本地开发文档,确保 docs/ 目录绝不进入 main 分支的 Git 历史
-
能力包含: 创建孤立文档分支、安全提取文档、分支合并防护、文档隔离验证
-
触发条件: 当用户需要在本地维护开发文档但不想将其提交到主干分支时使用
核心原则
绝对隔离原则
-
main 分支历史干净: docs/ 目录从未出现在 main 分支的任何提交中
-
docs 分支完全独立: 使用 orphan 分支创建,与 main 无共同历史
-
无法静默合并: 由于无共同祖先,误操作 merge 会立即报错
-
本地只读使用: 功能分支通过 git archive 临时获取文档,不跟踪修改
操作步骤
步骤 1: 创建孤立文档分支(首次设置)
前置检查:
确认 main 分支干净
git checkout main git status # 应无未提交更改
验证 main 从未包含 docs/
git log main -- docs/
若返回空,说明干净 ✅
创建孤立分支:
创建全新的、无历史的 docs 分支
git checkout --orphan docs
清空工作区(orphan 分支会保留当前文件)
git rm -rf .
创建 docs 目录和文档
mkdir docs echo "# Development Guide" > docs/dev-guide.md
添加更多文档...
提交文档(docs 分支的第一个提交,与 main 无任何关联)
git add docs/ git commit -m "chore(docs): initial local documentation"
回到 main,确认 docs/ 不存在
git checkout main ls -la # 应看不到 docs/
步骤 2: 在功能分支中安全使用文档
创建功能分支并提取文档:
1. 从 main 创建功能分支
git checkout main git checkout -b feat-user-login
2. 从 docs 分支提取文档(只读,不跟踪)
git archive docs docs/ | tar -x -C .
现在 ./docs/ 存在,但 Git 视为 untracked 文件
配置防护(关键步骤):
3. 将 docs/ 加入本地排除列表,防止误提交
echo "docs/" >> .git/info/exclude
验证:docs/ 不应出现在 git status 的待提交列表中
git status
开发完成后提交:
4. 明确添加代码目录(避免 git add . 风险)
git add src/ tests/ scripts/ # 根据项目结构调整
或:如果用了 git add .,则移除 docs/
git add . git reset docs/ 2>/dev/null || true
5. 提交代码(docs/ 不会被包含)
git commit -m "feat: implement user login"
6. 合并回 main
git checkout main git merge feat-user-login
7. 清理
git branch -d feat-user-login rm -rf docs/ # 删除临时拷贝
步骤 3: 验证隔离状态
检查 main 分支干净性:
检查 main 是否 ever 包含 docs/
git log --all --full-history -- docs/
更严格地,只查 main:
git log main -- docs/
如果返回空,说明 main 完全干净 ✅
验证 docs 分支独立性:
确认 docs 与 main 无共同祖先
git merge-base main docs
应返回空(无共同祖先)
资源索引
-
Git 命令参考: 见 references/git-commands.md(何时读取: 需要具体命令语法时)
-
分支策略详解: 见 references/branch-strategy.md(何时读取: 需要理解策略原理时)
安全机制说明
为什么这样绝对安全?
风险场景 如何被规避
docs/ 被提交到 main main 从未有 docs/,且 .git/info/exclude 阻止 git add .
docs/ 通过 merge 进入 main docs 是 orphan 分支,与 main 无共同祖先,merge 会报错
智能体误改文档导致丢失 原始文档始终在独立的 docs 分支中,本地副本可随意丢弃
历史污染 main 的整个提交历史都不含 docs/,满足"不能保存"的要求
分支结构可视化
main → [A] — [B] — [C] (无 docs/) ↑ └─ 所有 feat-* 从此分出,临时拷贝 docs/,用完即删
docs → [D] (孤立分支,只有 docs/,与 A/B/C 无关联)
注意事项
-
不要在 main 上创建过 docs/ 再删除: 那仍会留在历史中
-
如果项目早期已在 main 提交过 docs/: 建议用 git filter-repo 彻底清除历史
-
对于新项目: 用 --orphan 创建 docs 分支是最简单、最安全的起点
-
定期验证: 使用验证命令定期检查 main 分支的干净性
使用示例
示例 1: 新项目初始化
新项目,main 分支已存在
git checkout main
创建孤立 docs 分支
git checkout --orphan docs git rm -rf . mkdir docs echo "# API Documentation" > docs/api.md git add docs/ git commit -m "chore(docs): add API documentation"
回到 main
git checkout main
示例 2: 日常开发流程
开始新功能
git checkout -b feat-payment-module
获取最新文档
git archive docs docs/ | tar -x -C . echo "docs/" >> .git/info/exclude
开发...
参考 docs/api.md 进行开发
提交(docs/ 自动被排除)
git add src/ git commit -m "feat: implement payment module"
清理
git checkout main git merge feat-payment-module git branch -d feat-payment-module rm -rf docs/
示例 3: 更新文档
切换到 docs 分支更新文档
git checkout docs vim docs/api.md # 修改文档 git add docs/ git commit -m "docs: update API documentation"
回到 main
git checkout main