Skip to main content

9 posts tagged with "Git"

View All Tags
· 5 min read

git restore 和 revert 都能"撤销",但操作对象和历史影响完全不同。

  1. restore:操作文件(工作区/暂存区),不产生 commit
  2. revert:操作某次 commit必须新 commit
  3. 核心差异:restore 改文件,revert 反做 diff
  4. 进阶用法restore --source=<sha> + commit,文件 = 目标版
  5. 不能用 revert 退旧版:revert 只反补丁,无法对齐到任意 commit
  6. preserve history:替代 reset --hard免 force-push
· 6 min read

Git submodule 是 Git 原生的多仓库嵌套机制,父仓库只记 commit hash,不存文件内容。

  1. 是什么:主仓库子目录里嵌入独立 Git 仓库,各自有 commit 历史
  2. 三个核心命令submodule add / init + update / update --remote
  3. 典型场景:第三方库源码嵌入、独立发布周期的子项目
  4. 致命坑 1新 clone 是空目录,必须 init + update 才有内容
  5. 致命坑 2:子模块默认 detached HEAD,commit 容易推不上去
  6. 致命坑 3:主仓库切分支后忘了 update --remote,代码对不上
  7. 替代方案:monorepo 处理强耦合,subtree 处理简单嵌入
· 5 min read

git worktree 让多分支并行工作,一个目录 = 一个分支

  • 核心机制:所有 worktree 共享一个 .git 数据库
  • 典型场景:边修 bug 边开发 feature,不切分支
  • code review:独立目录看 PR,不打断当前工作
  • 跑长任务:CI、build 不阻塞主工作区
  • superpowers 模式一个 worktree 一个 agent,并行的关键
  • 使用注意同一分支只能被一个 worktree checkout
  • 清理规则:删目录不够,必须 git worktree remove