我有一个 Git 存储库,我们称之为
Foo
,我已在同一台 Windows 计算机上克隆了两次。我们将这两个本地存储库称为 Foo1
(在 C:\repos\Foo1
中)和 Foo2
(在 C:\repos\Foo2
中)。
现在我有两个克隆的原因是我有时需要同时在不同的分支上工作:例如,我可能正在“工作”本地存储库上的一个功能分支上工作
Foo1
,但随后我需要发布main
上的紧急修补程序,我不想(或不能)从功能分支切换出去,所以我只是移至 Foo2
并将其用于紧急修补程序。然而,实际原因无关紧要:我只是解释它以澄清设置。
我正在
Foo1
开发一个分支,在 Foo2
开发另一个分支。这些分支都没有准备好发布,并且由于我将来可能想将它们重新建立在main
上,我宁愿not将它们推送到它们共享的远程origin
(即Foo
) .
我想检查
branch2
的 Foo2
分支中的更改是否可以解决由于 branch1
的 Foo1
分支中的更改而产生的问题。我想将 branch2
“推”到 Foo1
并将 branch1
重新设置到它上面。然而,这两个存储库都不是裸露的,而且它们也在 Windows 机器上,所以我不知道是否有可能(更不用说推荐)做这样的事情。
我可以以某种方式“共享”两个本地存储库之间的分支,而不需要将其推入/拉出远程吗?
git worktree
的一个很好的例子。
管理附加到同一存储库的多个工作树。一个 git 存储库可以支持多个工作树,允许您一次签出多个分支。
基本上,您可以只拥有一个用于开发的存储库 (
foo1
),而不是拥有两个开发存储库,其中两个 (foo2
) 之一被添加为另一个 (foo1
) 的第二个遥控器,并且用于修复的第二个工作树 (foo2
) 在不同的外部目录中,它们都在同一个存储库下。
通过此设置,您将能够同时签出两个(在不同的文件夹中),并成为同一存储库的一部分。
要创建第二个wotktree,只需进入第一个存储库(
C:\repos\Foo1
)并输入
# create a new worktree and a new branch pointing to the given commit
git worktree add -b <name> <path> <commit-ish>
# Example: create a new worktree and a new branch called hotfix pointing to dev's tip
git worktree add -b hotfix ../hotfix dev