08月06, 2021

git worktree 使用技巧整理

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 清理。

本文链接:https://587v5.com/post/git worktree shi-yong-ji-qiao-zheng-li.html

Comments