我以前的git设置非常好,在运行git push
时它会自动推送到具有相同名称的远程分支,而在运行git pull
时会自动拉到它。
我试图向朋友展示如何做到这一点,并且在此过程中设法破坏了我自己的配置。我该如何找回我想要的功能?我尝试了一堆配置,但是每个配置都有问题。
我目前在~/.gitconfig
中有这个东西:
[push]
default = current
[branch]
autoSetupMerge = always
但是当我在本地创建一个新分支,然后提交并推送时,它会显示“一切都是最新的”。如果我随后运行git push origin <branch_name>
,则会推送更改。
这些设置似乎也无法解决问题:
[push]
default = matching
[branch]
autoSetupMerge = always
答案 0 :(得分:1)
这里的主控制旋钮确实是push.default
,您可能想要current
或matching
,它们有很大的不同:
current
意味着,如果省略refspec参数,则Git应该使用您当前所在的分支-git status
会说“ on branch ... ”,否则该git branch
将带有星号打印,并尝试将其推到其上游副本。也就是说,如果当前分支为xyz
,则current
设置将要求origin
将其xyz
分支(上游)设置为与{{ 1}}。 即使您的xyz
的上游是他们的xyz
,也是如此-请参阅下面的zyx
。
upstream
意味着,如果省略refspec参数,则您的Git应该从其Git中获得分支名称的列表。然后,对于它们的每个分支名称-无论它们是什么; matching
,master
,develop
等,您的Git应该查看您是否也有一个同名的分支,而与分支的哈希ID是什么无关。对于每个匹配的名称,您的Git应该要求其Git将其分支设置为与您的 Git为该名称显示的哈希ID相同。 / p>
zyx
设置意味着,例如,如果您运行:
matching
,它们有分支git push ssh://host.example.com/path/to/repo.git
,master
和develop
,而您有zyx
和master
,但没有develop
,您的即使他们的Git与您的Git完全无关,Git也会要求他们设置他们的 zyx
和master
以匹配您的develop
和master
(如果他们的Git与您的Git无关,那么这个礼貌的请求肯定会失败,所以没什么大不了的。)
您可以使用以下命令明确要求任何给定推送的develop
行为,而无需设置matching
设置:
push.default
也就是说,用冒号git push <remote> :
作为refspec意味着“匹配”。
其余的:
设置是push.default
,nothing
,upstream
和tracking
,主要是simple
的变体:< / p>
current
设置只会完全出错。我使用了一段时间,但发现它太烦人了。nothing
和upstream
的设置是同义词-tracking
是tracking
的不赞成使用的同义词-表示使用当前分支的上游设置来确定发送给其他Git的名称。因此,如果您的upstream
以forward
作为上游,您将要求他们更新其origin/reverse
。reverse
的设置与simple
和 upstream
的含义相同,并根据您{{1}的位置来选择要模拟的对象}-到:它将检查您使用的遥控器是否是为其设置了遥控器的遥控器,如果是,则其行为类似于current
,只是要求分支名称匹配。否则,它的行为就像git push
。这几天我将我的设置设为upstream
,有意推入新分支时只运行current
,而推入同名分支时simple
不带参数。
答案 1 :(得分:0)
您可以使用以下命令指示git默认创建具有相同名称的远程分支(我已经使用了全局级别,可以根据您的要求决定级别:
git config --global push.default current
您可以在第一次推送新分支时使用-u选项,这将有助于跟踪新分支,并且在拉出更改时会有所帮助。如果您没有使用-u进行首次推送,则也可以将其用于以后的推送。基本上,在使用-u选项进行推送后,跟踪才会开始。
git push -u
没有为新分支和推送更改指定来源和分支名称。