git worktree 使用技巧整理
git worktree add [-f] [--detach] [--checkout] [--lock] [-b <new-branch>] <path> [<commit-ish>]
git worktree list [--porcelain]
git worktree lock [--reason <string>] <worktree>
git worktree move <worktree> <new-path>
git worktree prune [-n] [-v] [--expire <expire>]
git worktree remove [-f] <worktree>
git worktree repair [<path>... ]
git worktree unlock <worktree>
语法速览
git worktree remove
git worktree remove ../path-to-folder
git worktree
git worktree add <path> <branch>
- 最简单的写法:
git worktree add <新路径>
将基于当前分支,新建一个 worktree 目录,新的分支名就是新建目录的名称。
- 新建一个指定分支
git worktree add <新路径> -b <新分支名>
将基于当前分支,新建一个 worktree 目录,新的分支名是指定的名称。
- 基于指定分支新建一个指定分支
git worktree add <新路径> -b <新分支名> <指定分支名>
将基于指定分支,新建一个 worktree 目录,新的分支名是指定的名称。
git worktree prune
mkdir a
cd a
git init
git commit --allow-empty --allow-empty-message -m ''
git worktree add ../b
ls .git/worktrees/
b
rm -rf ../b
git worktree prune
ls .git/worktrees/
注意事项
<新路径> 新路径一般是类似 ../myproject-bugfix 这样的命名,是相对路径,注意,这里一定是两个点: ../myproject-bugfix 表示在当前目录的父目录新建,这样才是与原工程目录平级。(当前,你当前得在原工程的跟目录中。) 总之,注意相对路径。
使用 git reset --hard 重置新的 worktree 如果使用了 git worktree add <新路径> 最简单的方法新建,通常分支需要重新命名,基于的分支也要改。 可使用 git reset --hard <要基于的分支名> 重置到想要的分支,使用 git branch -D <想要删除的分支名> 删除自动创建的与目录名相同的分支。
其他
相比复制多个仓库,肯定是 worktree 的方式更高效。 当然,worktree 不允许两个 worktree 使用同一个分支。如果有这个需要怎么办?新建一个分支,reset 到目标分支,再基于这个新分支工作,效果一样。 但如果你经常需要在两个目录中使用同一个分支,那么可能是分支管理或工作方式需要改进。
另外,不使用的 worktree 尽早删除,并运行 git worktree prune 清理。
Comments