如何在不检出分支的情况下拉取 git 分支?

5

我在一个代码库中有两个分支(release + dev),我经常在这两个分支上工作。但是,当我在分支之间切换时,我的项目会触发一个长时间的构建过程(大约30分钟左右),因此我宁愿避免频繁切换。为了在这两个分支上工作,我创建了2个库的副本,这很好用。

但是,当我想要合并更改时,我需要使release分支处于激活状态以拉取更改。然后我可以切回develop分支,执行合并和提交操作。但正如我上面写的那样,这次切换会导致长时间的重建。有没有另一种方法可以在不首先激活分支的情况下拉取分支?


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - chepner
结帐本身不会触发构建,但下次进行构建时,会发现太多文件被触及,因此许多不必要的文件将被重新编译。 - Mike Lischke
1
在构建之前,你不能只是再次检出master吗?这不是git的问题,而是两个分支中代码显然存在很大差异的问题。 - chepner
1
检出另一个分支不会“未触及”文件。当从dev切换到release以进行合并,然后再切换回dev时,将会触及许多文件。你无法撤消这个操作。在我看来,这是git最薄弱的地方之一(在原地切换分支)。 - Mike Lischke
3个回答

6
您可以获取远程更改。这将下载来自远程存储库的所有更改,但不会执行其他操作。但是,如果您想将分支A合并到分支B中,则必须先检出B。
"git pull"只是"git fetch"和"git merge"的组合。

你可以在不检出分支的情况下合并一个分支。你需要检出要合并的目标分支,然后运行命令 git merge <branch_to_merge>。我有误解你的意思吗? - Gauthier
在您的包含“release”分支的文件夹中,您需要执行“git fetch”和“git merge develop”命令。您无需检出develop分支。但是,您必须从检出“develop”的文件夹中推送更改。 - Michael Mairegger
@Gauthier 我的意思是“如果你想将分支A合并到B中,你不必检出分支A”。你是正确的,这有点令人困惑。我已经修改了答案,使其更加恰当。 - Michael Mairegger
注意:我的问题不是关于合并的。我知道目标分支需要被检出才能进行合并。我更想知道如何更新一个没有被检出的分支(然后可以轻松地合并到已检出的分支)。 - Mike Lischke
我尝试了fetch:它不会更新我的发布分支(如果没有签出)。所以它完全没有帮助。 - Mike Lischke
显示剩余5条评论

1
如果您想将远程存储库中的分支合并到当前分支中,无需切换分支。
如果我理解正确,您有一个使用“release”检出的存储库,另一个使用“dev”检出的存储库,您正在其中工作。当您在“dev”中完成某些操作后,希望将其合并到“release”中,而不需要检出“release”。
我猜您在两个存储库中都设置了远程,以便两个存储库可以相互引用。
切换到“release”存储库。从“dev”存储库获取更改:
git fetch <dev_remote> <branch>

您现在的release仓库中有一个更新的dev分支,尽管您不需要将其检出。请注意,更新的dev分支的名称包含:远程名称、斜杠,然后是分支名称。这是一个远程分支,在gitk中显示为两种颜色,并且可以使用git branch -a查看为remotes/<remote_name>/<branch>
将更新的分支合并到您本地的release分支中:
git merge <dev_remote>/<branch>

这就是全部内容。没有“checkout”,但是你的“release”仓库中的“release”分支已经合并了“dev”的内容。
这是原则。现在,你可以一步完成此操作:
cd <release_repo> # you are on the release branch
git pull <dev_remote> <branch_name_in_dev_remote>

你在 dev_remote 分支上的代码将被获取并合并到你目前所检出的 release 仓库分支中。

同样,您需要使用 release 中的新合并提交更新您的 dev 存储库:

cd <dev_repo> # you are on the dev branch
git pull <release_remote> <branch_name_to_pull>

我明白了。你的基本想法是将远程发布分支拉入本地开发分支,这并不完全是我所问的(因为本地未签出的发布分支没有被更新),但至少它避免了必须切换分支的情况。谢谢。 - Mike Lischke
是的,这就是为什么你需要在两个仓库中拉取远程分支的原因。如果你想要更新dev仓库中的本地release分支,请将目标本地分支添加到fetch命令中:git fetch <rel_repo> <remote_release_branch>:release。这将会更新你的本地引用。但是如果你不想无论如何都检出它,我不知道你会怎么做。 - Gauthier

-1

我最终得到了另一个仓库的副本,专门用于合并。由于此文件夹中没有构建正在进行,因此我可以轻松地在分支之间切换。完成所有合并并推送后,我可以将它们拉入各自的工作文件夹中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接