git 配置设置自动创建同名远程分支

问题描述 投票:0回答:4

我曾经把我的 git 设置得很好,当我运行时它会自动推送到同名的远程分支

git push
,并在运行时自动拉取
git pull

我试图向朋友展示如何做到这一点,并在此过程中设法破坏了我自己的配置。我怎样才能恢复我正在寻找的功能?我尝试了很多配置,但每个配置都有其问题。

我目前在

~/.gitconfig
中有这个:

[push]
    default = current
[branch]
    autoSetupMerge = always

但是当我在本地创建一个新分支,然后提交并推送时,它会显示“一切都是最新的”。如果我随后运行

git push origin <branch_name>
,它确实会推送更改。

这些设置似乎也不起作用:

[push]
    default = matching
[branch]
    autoSetupMerge = always
git git-config
4个回答
19
投票

您可以使用

git config --global push.default current
进行配置 使其推送当前分支以更新同名分支。

但是,在 2022 年,使用 git 版本 git >= 2.37.0,您可以在 git config 中指定这一点

git config --global --add --bool push.autoSetupRemote true
,这可以在设置上游跟踪的同时实现相同的效果。


16
投票

您可以使用以下命令指示 git 默认创建同名远程分支(我使用的是全局级别,您可以根据您的需求决定级别:

git config --global push.default current

来源

您可以使用 -u 选项首次推送新分支,它将有助于跟踪新分支并有助于拉取更改。如果第一次推送时没有使用 -u ,以后推送时也可以使用它。基本上,跟踪将在使用 -u 选项推送后开始。

git push -u

无需为新分支和推送更改指定来源和分支名称。


4
投票

这里的主控制旋钮确实是

push.default
,您可能想要
current
matching
,它们有一个非常重大的区别:

  • current
    意味着如果你省略 refspec 参数,你的 Git 应该使用你现在所在的分支 -
    git status
    会说“在分支...”,或者
    git branch
    会说用星号打印 - 并尝试将其推送到其上游对应部分。也就是说,如果当前分支是
    xyz
    ,则
    current
    设置将要求
    origin
    将其
    xyz
    分支(您的上游)设置为与您的
    xyz
    相同的哈希 ID。 即使您的
    xyz
    的上游是他们的
    zyx
    ,情况也是如此 - 请参阅下面的
    upstream

  • matching
    意味着如果您省略 refspec 参数,您的 Git 应该从其 Git 获取分支名称列表。然后,对于每个分支的名称——无论它们是什么;
    master
    develop
    zyx
    等等 — 无论您的分支的哈希 ID 是什么,您的 Git 都应该查看您是否也有同名的分支。对于每个匹配的 name,您的 Git 应要求其 Git 将 他们的 分支设置为 your Git 为该名称显示的相同哈希 ID。

matching
设置意味着,例如,如果您运行:

git push ssh://host.example.com/path/to/repo.git

并且他们有分支

master
develop
zyx
,而你有
master
develop
但没有
zyx
,你的 Git 会要求他们设置 他们的
master
 develop
匹配您的
master
develop
,即使他们的 Git 与您的 Git 完全无关。

(如果他们的 Git 与你的无关,这个礼貌的请求肯定会失败,所以这没什么大不了的。)

您可以在任何给定的推送上明确要求

matching
行为,而无需设置
push.default
设置,使用:

git push <remote> :

也就是说,裸露的冒号

:
作为 refspec 意味着“匹配”。

其余的

push.default
设置,即
nothing
upstream
tracking
simple
,大多是
current
的变体:

  • 如果省略 refspec,则
    nothing
    设置会完全出错。我用过一段时间,但发现它太烦人了。
  • upstream
    tracking
    设置是同义词 -
    tracking
    upstream
    已弃用的同义词 - 意味着 使用当前分支的上游设置来确定发送到另一个 Git 的名称。因此,如果您的
    forward
    origin/reverse
    作为其上游,您将要求他们更新其
    reverse
  • simple
    设置与
    upstream
    current
    的含义相同,根据您要
    git push
    的位置选择要模拟的设置:它会检查您正在使用的遥控器是否是为其设置了遥控器,如果是这样,则行为类似于
    upstream
    ,只不过它要求分支名称匹配。否则,它的行为就像
    current

这些天我将我的设置设置为

simple
,并且在故意推送新分支时运行
git push -u origin HEAD
,并且在推送到同名分支时不带参数运行
git push


0
投票

如果你想把它放在 .gitconfig 中,也许类似

[push]
    autoSetupRemote = true

会成功的。

© www.soinside.com 2019 - 2024. All rights reserved.