如何在Git中的两个单独的工作树之间切换分支?

时间:2019-04-02 07:38:16

标签: git git-worktree

我为“开发”分支添加了一个链接的工作树。所以我的工作树是这样的:

  -“项目”工作树->主分支
  -“ project_develop”工作树->开发分支

在这种情况下,我要做的是检出“ project_develop”工作树上的master分支。但是据我所知,不可能在不同的工作树上签出相同的分支。我能想到的唯一方法是添加一个新的临时分支。

如果有人告诉我另一种方式,我将不胜感激。
谢谢!

2 个答案:

答案 0 :(得分:3)

最简单的方法是在master工作树上

git checkout --detach

还有许多其他方式;关键是,由于您没有另一个分支可以检出到该工作树,因此您想强制其进入分离的HEAD状态。它仍然可以签出相同的代码。只是不能认为它在master分支上(因为提交时更新工作树会出现问题)。

完成后,您可以git checkout master进入第二个工作树,然后,如果您愿意,甚至可以回到第一个工作树,然后git checkout develop完全交换分支。或者只是等到您准备好将develop返回到第二个工作树之后,再在第一棵树上再次检查master ...

答案 1 :(得分:1)

我认为创建一个临时分支是最好的。如果您不想创建临时分支,则还有其他选择。

  1. 签出特定的提交。就您而言,您可以只运行git checkout refs/heads/master。它导致分离的HEAD状态。 refs/heads/master可以替换为特定的提交。

  2. 根据需要为分离的HEAD创建尽可能多的工作树。您可以运行git worktree add /path/foo1 refs/heads/mastergit worktree add /path/foo2 refs/heads/master,...,git worktree add /path/fooN refs/heads/master

  3. develop重置为master。在“ project_develop”工作树中,运行git reset master --hard

这些方法绕过了不能为同一分支创建第二个工作树的限制。第一和第二几乎与一个临时分支相同。第三可能会让您有些困惑。