git worktree 的入门
概念:关联工作树
-
主工作树:拥有完整的 .git/ 文件夹,里面存着整个项目的所有 commit 历史、分支引用、配置信息、缓存对象等。
-
关联工作树:里面只有一个纯文本文件 .git(可以用 cat .git 查看),里面只写了一行路径。
gitdir: /Users/dev/my-project/.git/worktrees/feat-payment
关联工作树开发完随时可以用 git worktree remove 移除,删了对项目历史没有任何破坏。
点击查看图片
使用场景
场景1:当前分支还在更新,此时需要切到另一个分支执行某个紧急修复。
传统解法:
直接将当前更新内容提交一个新记录,或者 git stash。再 git switch 到该分支进行修复。
新解法:
基于该分支(需要紧急修复的分支)创建一个关联工作树,保存到某个子目录中,进入到该子目录进行修改或提交代码。解决完成后可以直接删除该子目录。
创建关联工作树
1. 基于已有分支创建工作树
git worktree add <路径> <已有分支>
2.基于已有 commit hash(或分支)创建新分支工作树
git worktree add -b <新分支> <路径> <Commit/Tag/分支>
① 新建工作树必须要绑定分支,除非创建游离工作树(相当于直接拷贝目录,不能执行 pull merge 等操作)
② 一个分支最多只能挂载一个关联工作树。
# 举例1:先创建关联工作树,再回到主工作树切换到同一个分支,报错
# 先开了一个新目录绑定了 b1
git worktree add ../dir-b1 b1
# 在原来的主目录里执行 git switch
git switch b1
fatal: 'feat-login' is already checked out at '/path/to/dir-login'
# 举例2: 当前已经是分支b1,再基于b1创建关联工作树,报错
git worktree add ../dir-b1 b1
3. 基于已有 commit hash(或分支)创建游离工作树
git worktree add -d <路径> <Commit/Tag/分支>
浙公网安备 33010602011771号