我用git worktree add
来创建一个新的工作树。我注意到这是在回购中创建了一个与工作树相同名称的新分支。这个分支是什么?为什么git worktree添加了创建分支,我可以删除它吗?
我已经检出了另一个在第二个工作树中的预先存在的分支。我可以自由删除git worktree add
创建的分支吗?
我用git worktree add
来创建一个新的工作树。我注意到这是在回购中创建了一个与工作树相同名称的新分支。这个分支是什么?为什么git worktree添加了创建分支,我可以删除它吗?
我已经检出了另一个在第二个工作树中的预先存在的分支。我可以自由删除git worktree add
创建的分支吗?
该分支是必需的,因为您不能在同一时间在不同的工作区检出同一分支。
因此,如果您在添加工作树时未指定分支,那么git会根据您当前的分支和工作目录的名称自动添加一个分支。
你可能会问,为什么我不能有两次同一个分支结账?想一想,当你承诺B时,如果他们共享分支,工作树A会发生什么......工作树A会将B中的提交视为本地差异,但反过来看!就好像你做了git reset --soft HEAD^
...那会很危险。
顺便说一句,这就是为什么你不能将推送到检出的非裸仓库的一个分支。
关于你的最后一个问题:你可以删除分支吗?当然,这个分支绝不是特别的。只要没有在任何地方签出,您就可以删除它。
谢谢!我在http://stackoverflow.com/questions/39665570/why-can-two-git-worktrees-not-check-out-the-same-branch分别询问了双重结帐问题 –
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.
似乎你可以在--detach
的分离模式下运行,它不会创建分支。如果您不打算在工作树中进行修改,但是运行构建或运行测试(例如),这可能会很有用。
来源: https://stacktoheap.com/blog/2016/01/19/using-multiple-worktrees-with-git/#long-running-tasks
至于其他人回答这个问题,我把命令删除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>
我可能是错的,但我的猜测是,这个分支就是你居然就在worktree工作时。 –
我想我应该指定我创建工作树时想要检查的预先存在的分支,而不是之后切换分支。那么我会避免创建一个新的分支。 –
我真的不能说*为什么他们这样做,但是是的,你必须为新的工作树指定一个分支,所以他们默认让它创建一个与新工作相同的分支,树。如果没有'-b'或'-B'或者最后一个参数,他们可能会'git worktree add/path/to/foo'失败,而不是默认在这里使用'foo',但我猜测他们认为它更多方便在这里默认使用'foo'。 – torek