git worktree

git worktree 是 Git 提供的一个非常实用的功能,它允许你在同一个仓库中创建多个工作副本(工作树),每个副本可以检出不同的分支,而不会相互干扰。


✅ 使用场景

  • 你需要同时开发多个功能分支,但不想频繁切换分支。
  • 你在主分支工作的同时,还需要在旧版本上打补丁。
  • 用于自动化构建或测试多个版本。

🧩 基本概念

Git 仓库由两部分组成:

  1. .git(仓库对象和配置)
  2. 工作目录(你操作的文件)

通常,一个 Git 仓库对应一个工作目录。但 git worktree 允许你将多个工作目录挂在同一个 .git 仓库下,这些目录共享 .git 数据,但彼此独立。


🛠️ 常用命令

✅ 添加一个新的工作树

1
git worktree add ../my-feature-branch feature-branch

在仓库外创建一个目录 ../my-feature-branch,并在其中检出 feature-branch 分支。

如果分支还不存在,可以直接创建:

1
git worktree add -b feature-branch ../my-feature-branch origin/main

✅ 查看当前所有工作树

1
git worktree list

示例输出:

1
2
/project/main          abcd123 [main]
/project/my-feature dcba321 [feature-branch]

✅ 移除工作树(不删除分支)

1
git worktree remove ../my-feature-branch

✅ 删除已失效的工作树(如果目录手动被删了)

1
git worktree prune

⚠️ 注意事项

  • 同一个分支不能同时被多个 worktree 使用。
  • git worktree 使用的是主仓库的 .git 目录,共享 commit 历史,节省空间。
  • 每个 worktree 会在 .git/worktrees/ 下注册自己的元数据。

🧪 示例操作流程

1
2
3
4
5
git clone git@github.com:your/project.git
cd project
git worktree add -b hotfix ../hotfix-branch origin/main
cd ../hotfix-branch
# 你现在可以在 hotfix 分支上操作,而不影响主分支

如你有具体需求(例如工作在多个版本上打补丁),我可以给出更针对性的建议或脚本。是否需要示例工作流?

Experiment on your code freely with Git worktree