为什么git worktree add会创建一个分支,我可以删除吗?

时间:2016-09-26 16:01:16

标签: git git-worktree

我使用git worktree add创建了一个新的工作树。我注意到它在repo中创建了一个与工作树同名的新分支。这个分支是什么?

我已在第二个工作树中检出了另一个预先存在的分支。我可以自由删除git worktree add创建的分支吗?

6 个答案:

答案 0 :(得分:18)

当其他人回答这个问题时,我在此处删除了folder,删除worktree并删除branch的命令:

首先,列出所有工作树,以便仔细检查......

$ git worktree list

然后,删除工作树的文件夹

$ rm -rf ../path/to/worktree

之后,删除工作树本身

$ git worktree prune

如果你有多个工作树,上面的命令只修剪它的路径不再存在的工作树,所以不要担心!

最后,删除分支(与工作树相同的分支名称)

$ git branch -D <branch-name>

答案 1 :(得分:12)

分支是必要的,因为您不能同时在不同的工作树中检出相同的分支。

因此,如果在添加工作树时没有指定分支,那么git将根据您当前的分支和工作树目录的名称自动添加一个分支。

您可能会问,为什么我不能两次分支结账?想想当你提交B时工作树A会发生什么,如果他们都共享分支......工作树A会看到B中的提交作为本地区别,但反之亦然!就好像你做过git reset --soft HEAD^ ......那将是非常危险的。

BTW,这就是为什么你不能推送签出的非裸存储库的分支的原因。

关于你的上一个问题:你能删除分支吗?当然,那个分支绝不是特别的。只要没有在任何地方签出,您就可以删除它。

答案 2 :(得分:3)

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.

答案 3 :(得分:3)

如果没有指定,

git worktree将添加一个新分支:

  

如果省略function translatePigLatin(str) { for (i = 0; i < str.length; i++) { let constantants = []; if ( str[0] == 'a' || str[0] == 'a' || str[0] == 'e' || str[0] == 'i' || str[0] == 'o' || str[0] == 'u' ) { return str + 'way'; } else { while (str[i] != 'a' || str[i] != 'a' || str[i] != 'e' || str[i] != 'i' || str[i] != 'o' || str[i] !='u'){ constantants.push(str[i]); } return str.slice(constantants.length) + constantants + 'ay'; } } } translatePigLatin('california'); 且未使用<commit-ish>-b-B,   然后,为方便起见,自动创建一个基于HEAD的新分支,   就像指定了--detach一样。

Since Git 2.17,您可以使用git worktree remove删除该分支。

但是,同样的-b $(basename <path>)命令也包括:

  

可以使用remove删除不干净的工作树或带子模块的工作树   无法删除主工作树。

真......除了--force在Git 2.17中没有完全实现。

使用Git 2.18(2018年第二季度),“--force”获悉“git worktree remove”是“-f”选项的简写,就像“git worktree add”一样。< / p>

commit d228eeaStefan Beller (stefanbeller)(2018年4月17日) 帮助:Eric Sunshine (sunshineco)
(由Junio C Hamano -- gitster --合并于commit 90186fa,2018年5月8日)

  

--force:接受worktree缩短-f以便删除

     

许多命令支持“--force”选项,通常缩写为   “--force”。
  但是,“-f”的手动git worktree remove会忘记   尽管有OPT_BOOL文件记录,但仍能识别短文   支持“git-worktree.txt”   将-f替换为免费提供“OPT_BOOL”的OPT__FORCE,并使“-f”符合“remove”选项解析(也指定了add旗帜。)

答案 4 :(得分:2)

似乎你可以使用--detach以分离模式运行,而var data = {"Name":"first name","age":30} var serializedData = JSON.stringify(data); var link = document.getElementById('downloadlink'); link.href = makeTextFile(serializedData); document.getElementById('downloadlink').click(); 不会创建分支。如果您不打算在工作树中进行修改,但仅运行构建或运行测试,这可能很有用。

来源: https://stacktoheap.com/blog/2016/01/19/using-multiple-worktrees-with-git/#long-running-tasks

答案 5 :(得分:0)

从Git 2.17.0开始,您可以安全地运行这个一体化命令

git worktree remove <path>