如何使用git一次拉入多个分支?

Sup*_*ole 17 git

在一个 repo 中,我有多个分支,其中包括“master”和“develop”,它们被设置为跟踪远程分支“origin/master”和“origin/develop”。

是否可以指定我希望 master 和 develop 一次合并(快进)?

当我git pull现在这样做时,我会得到这样的东西:

remote: Counting objects: 92, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 70 (delta 29), reused 28 (delta 8)
Unpacking objects: 100% (70/70), done.
From scm.my-site.com:my-repo
   5386563..902fb45  develop    -> origin/develop
   d637d67..ba81fb2  master     -> origin/master
Updating 5386563..902fb45
Fast-forward
Run Code Online (Sandbox Code Playgroud)

获取所有远程分支,但只有我当前所在的分支与其对应的远程分支合并。

所以我必须做git checkout master...

Switched to branch 'master'
Your branch is behind 'origin/master' by 106 commits, and can be fast-forwarded.
Run Code Online (Sandbox Code Playgroud)

...然后git pull再次,然后切换回开发,以获得所需的结果。

我知道我可以制作执行这些步骤的别名/脚本。但我想尽可能避免这种情况,因为它容易出错且效率不高
编辑:好的,让我改写一下。我的目标不是阻止或反对 git 的脚本/别名自定义。如果存在,我更喜欢内置解决方案:)

40X*_*und 14

您可以设置一个git fetch与 refspecs 一起使用的别名,只需一个命令即可快速合并您的分支。在您的用户.gitconfig文件中将其设置为别名:

[alias]
    sync = "!sh -c 'git checkout --quiet --detach HEAD && \
                    git fetch origin master:master develop:develop ; \
                    git checkout --quiet -'"
Run Code Online (Sandbox Code Playgroud)

用法:git sync

这就是它起作用的原因:

  1. git checkout --quiet HEAD直接检查你当前的提交,让你进入分离的头部状态。这样,如果您在master或上,则将develop工作副本与这些分支指针分离,从而允许移动它们(Git 不允许您在工作副本签出分支引用时移动它们)。

  2. git fetch origin master:master develop:develop使用 refspecs withfetch快进本地存储库中的masterdevelop分支。语法基本上告诉 Git“这是表单的 refspec <source>:<destination>,取<destination>并快进到与”相同的点<source>。所以别名中的源是来自 的分支origin,而目标是这些分支的本地存储库版本。

  3. 最后,git checkout --quiet -检查您上次所在的分支,无论之前的命令是否失败。因此,如果您在master运行时处于开启状态git sync,并且一切顺利,您将离开 detached head 状态并查看新更新的master.

另请参阅我对 git 的回答:更新本地分支而不检查它?.