2016-09-26 42 views
5

我用git worktree add来创建一个新的工作树。我注意到这是在回购中创建了一个与工作树相同名称的新分支。这个分支是什么?为什么git worktree添加了创建分支,我可以删除它吗?

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

+0

我可能是错的,但我的猜测是,这个分支就是你居然就在worktree工作时。 –

+0

我想我应该指定我创建工作树时想要检查的预先存在的分支,而不是之后切换分支。那么我会避免创建一个新的分支。 –

+1

我真的不能说*为什么他们这样做,但是是的,你必须为新的工作树指定一个分支,所以他们默认让它创建一个与新工作相同的分支,树。如果没有'-b'或'-B'或者最后一个参数,他们可能会'git worktree add/path/to/foo'失败,而不是默认在这里使用'foo',但我猜测他们认为它更多方便在这里默认使用'foo'。 – torek

回答

7

该分支是必需的,因为您不能在同一时间在不同的工作区检出同一分支。

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

你可能会问,为什么我不能有两次同一个分支结账?想一想,当你承诺B时,如果他们共享分支,工作树A会发生什么......工作树A会将B中的提交视为本地差异,但反过来看!就好像你做了git reset --soft HEAD^ ...那会很危险。

顺便说一句,这就是为什么你不能将推送到检出的非裸仓库的一个分支。

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

+0

谢谢!我在http://stackoverflow.com/questions/39665570/why-can-two-git-worktrees-not-check-out-the-same-branch分别询问了双重结帐问题 –

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. 
4

至于其他人回答这个问题,我把命令删除folder,删除worktree这里删除branch

首先,列出你所有的worktrees的双重检查。 ..

$ git worktree list 

然后,删除worktree的文件夹

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

后,删除worktree本身

$ git worktree prune 

如果你有一个以上的worktree,上面的命令只修剪worktree其路径不存在了,所以不用担心!

最后,删除分支(同样分支的名称作为worktree)

$ git branch -D <branch-name> 
相关问题