我曾经git worktree add
创建一个新的工作树。我注意到它在 repo 中创建了一个与工作树同名的新分支。这个分支是干什么用的?
我在第二个工作树中检查了另一个预先存在的分支。我可以自由删除git worktree add
创建的分支吗?
我曾经git worktree add
创建一个新的工作树。我注意到它在 repo 中创建了一个与工作树同名的新分支。这个分支是干什么用的?
我在第二个工作树中检查了另一个预先存在的分支。我可以自由删除git worktree add
创建的分支吗?
当其他人回答这个问题时,我在这里放置了删除folder
、删除worktree
和删除的命令branch
:
首先,列出所有工作树以仔细检查...
$ git worktree list
然后,删除工作树的文件夹
$ rm -rf path/to/worktree
之后,删除工作树本身
$ git worktree prune
如果您有多个工作树,上述命令只会修剪其路径不再存在的工作树,所以不用担心!
最后,删除分支(与工作树相同的分支名称)
$ git branch -D <branch-name>
该分支是必要的,因为您不能同时在不同的工作树中签出相同的分支。
因此,如果您在添加工作树时没有指定分支,那么 git 会根据您当前的分支和工作树目录的名称自动添加一个。
你可能会问,为什么我不能让同一个分行结账两次?想想当你提交到 B 时工作树 A 会发生什么,如果它们都共享分支......工作树 A 会将 B 中的提交视为本地差异,但相反!就好像你这样做了git reset --soft HEAD^
......那将是非常危险的。
顺便说一句,这与您无法推送到已签出的非裸存储库的分支的原因相同。
关于您的最后一个问题:您可以删除分支吗?当然,那个分支一点也不特别。只要未在任何地方签出,您就可以将其删除。
从 Git 2.17.0 开始,您可以安全地运行这个一体化命令
git worktree remove <path>
git worktree --help 清楚地提到了这一点,如下所示。
COMMANDS
add <path> [<branch>]
Create <path> and checkout <branch> into it. The new working directory is linked to the current repository, sharing everything
except working directory specific files such as HEAD, index, etc.
If <branch> is omitted and neither -b nor -B is used, then, as a convenience, a new branch based at HEAD is created automatically,
as if -b $(basename <path>) was specified.
prune
Prune working tree information in $GIT_DIR/worktrees.
git worktree
如果没有指定,将添加一个新分支:
如果
<commit-ish>
省略并且既不也不-b
使用,则为方便起见,将自动创建一个基于 HEAD 的新分支,就像指定的一样。-B
--detach
-b $(basename <path>)
从 Git 2.17 开始,您可以使用git worktree remove
.
但是,同样的remove
命令还包括:
不干净的工作树或带有子模块的树可以用
--force
.
无法删除主工作树。
是的...除了在 Git 2.17--force
中没有完全实现。
在 Git 2.18(2018 年第二季度)中,“ git worktree remove
”了解到“ -f
”是“ --force
”选项的简写,就像“git worktree add”一样。
请参阅Stefan Beller ( ) 的提交 d228eea(2018 年 4 月 17 日)。
帮助者:Eric Sunshine ( )。(由Junio C Hamano 合并 -- --在提交 90186fa中,2018 年 5 月 8 日)stefanbeller
sunshineco
gitster
worktree
: 接受为移除-f
的缩写--force
许多命令支持“
--force
”选项,通常缩写为“-f
”。
然而,尽管记录了“ ”作为支持,“git worktree remove
”的手卷OPT_BOOL
却忘记了识别短格式。 替换为,它免费提供“ ”,并使 ' ' 与 ' ' 选项解析(也指定标志)一致。git-worktree.txt
-f
OPT_BOOL
OPT__FORCE
-f
remove
add
PARSE_OPT_NOCOMPLETE
似乎您可以使用分离模式运行--detach
,这不会创建分支。如果您不打算在工作树中进行修改,而只是运行构建或运行测试,这可能会很有用。
来源: https ://stacktoheap.com/blog/2016/01/19/using-multiple-worktrees-with-git/#long-running-tasks