如何默认推送到不同名称的分支?

时间:2016-09-19 18:27:11

标签: git git-branch git-push git-remote

我有两个分支:

master
demo_master

两个遥控器:

origin
demo_origin

如何配置git以便在发出git push命令时自动将 master发送到origin / master 并将 demo_master发送到demo_origin / master

我试图通过

达到预期的效果
git push --set-upstream demo_origin demo_master:master

但是,每当我尝试使用git push时,git都会发出以下错误:

  

致命:当前分支的上游分支与   您当前分行的名称。推到上游分支   远程,使用

git push demo_origin HEAD:master
     

要推送到遥控器上同名的分支,请使用

git push demo_origin demo_master

3 个答案:

答案 0 :(得分:1)

您需要set the push.default configuration正确:

  

定义在未明确给出refspec的情况下应采取的操作git push。不同的值非常适合特定的工作流程;例如,在纯粹的中央工作流程中(即获取源等于推送目的地),upstream可能就是你想要的。

使用Git 2.0,默认情况下此设置设置为simple,以便初学者轻松使用:

  

simple - 在集中式工作流程中,如上游分支的名称与本地分支的名称不同,就像上游一样工作,增加安全性以拒绝推送。

     

当推送到与您通常拉出的遥控器不同的遥控器时,请作为当前工作。这是最安全的选择,适合初学者。

正如选项所说,Git将拒绝推送到具有不同名称的分支。为了实现这一目标,您需要将其设置为upstream

  

upstream - 将当前分支推回到其更改通常集成到当前分支(称为@{upstream})的分支。只有当您推送到通常从中拉出的相同存储库时(即中央工作流程),此模式才有意义。

所以,执行git config -g push.default upstream,然后它应该可以正常使用git push --set-upstream demo_origin master:demo_master。 (请注意,本地分支位于local:remote

答案 1 :(得分:1)

<块引用> <块引用>

在 Git 2.0 中,此设置默认设置为简单,以方便初学者:

simple - 在集中式工作流程中,如果上游分支的名称与本地分支名称不同,则像上游一样工作,并增加了安全性以拒绝推送。

推送到与您通常拉出的遥控器不同的遥控器时,请作为当前使用。这是最安全的选择,适合初学者。

已使用 Git 2.33(2021 年第 3 季度)重写,添加了关于 git push 的说明。

参见 commit 90cfb26commit 7e6d72bcommit b8e8b98commit 6b010c8commit d099b9ccommit 3b9fd83commit 050f76b(2021 年 5 月 31 日)来自Felipe Contreras (felipec)
(2021 年 7 月 13 日于 Junio C Hamano -- gitster --commit 07e230d 合并)

<块引用>

doc:推送:正确解释default=simple

抄送:以利亚纽伦
签字人:Felipe Contreras

<块引用>

简单模式仅在集中式工作流上工作时会出现 barfs,并且没有配置同名的上游分支。

git config 现在包含在其 man page 中:

<块引用>

simple

将同名的当前分支推送到远程。

如果您正在处理集中式工作流(推送到您从中拉取的同一个存储库,通常是 origin),那么您需要配置一个同名的上游分支。

此模式是 Git 2.0 以来的默认模式,是最安全的选项,适用于 初学者。


这就解释了为什么默认设置不适合您的情况,而您需要,如上所述:

git config -g push.default upstream, 
git push --set-upstream demo_origin master:demo_master

注意第二次推送只针对第一次推送:一旦上游分支被设置,一个简单的git push(无参数)就足够了。

答案 2 :(得分:0)

master本地分支上使用git push origin -u master并在demo_master分支上使用git push demo_origin -u master

另一种解决方案是使用来自git branch -u origin/master分支的master和来自git branch -u demo_origin/master分支的demo_master

https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches