如何从多次提交中推送多个分支?

68

在GitHub发布Windows应用之前,我从未使用过git,所以我从未在命令行中使用过它。

这就是我的情况:
我在master上进行了一些提交,然后切换到其他分支并在那里进行了一些提交。所有这些都没有推送到GitHub。 当我在Windows应用程序中单击同步(我认为这相当于git push)时,令我惊讶的是,我所有的提交都被推送到了我的新分支,即使是我在master中做的提交也被推送了。

由于这是Windows应用程序的行为,我想我必须使用命令行。
正确的git push命令是什么,可以将提交内容推送到远程的正确分支?

6个回答

105
如果你想推送几个特定的分支(例如branch1和branch2),你可以使用以下命令:
git push origin branch1 branch2
git push origin branch1 branch2 

在 Git >= 2.4中,此操作可以原子地完成(即如果未能推送指定的任何分支,则不会推送任何内容):

git push --atomic origin branch1 branch2 

101

要推送所有分支(refs/heads下的引用),请使用以下命令(其中origin是您的远程仓库):

git push origin --all
你也可以在配置中将push.default设置为matching,以便默认推送两端名称相同的所有分支。例如:
git config --global push.default matching
自Git 2.0版本开始,默认值为simple,这是最安全的选项。

2
为了澄清上面的评论,根据push的文档:“特殊的refspec :(或+:允许非快进更新)指示Git推送“匹配”的分支:对于每个在本地存在的分支,如果远程已经存在同名的分支,则更新远程分支。”。 - rgoliveira

9

git push origin默认情况下会从所有跟踪分支推送到远程。

git push origin my-new-branch仅会推送新的分支。

我认为没有什么简单或不小心做的事情会将两个不同分支的提交推送到同一个分支并在远程执行合并操作。

我猜测新分支中有来自主分支的提交历史记录。要确认这一点,请在本地运行git log my-new-branch,看看这些提交是否在您的历史记录中。

如果是这样,在您“切换分支”后,您可能是在新提交后从主分支进行分支创建的,因此新分支具有所有提交的历史记录,而不仅仅是该分支独有的提交。


1
我不确定你上次的建议,我认为命令只是 git push origin branchOne anotherBranch - Drealmer
3
我认为更新版本的git不会推送所有跟踪分支: https://dev59.com/E2cs5IYBdhLWcg3wGQDF#13148313 - Andrew Mao

5
晚回答,但我将分享对我有效的解决方案。
最终我的 /foo/.git/config 文件看起来像这样:
[core]
    ...

[remote "dev"]
    url = http://dev.foobar.com/foo.git
    fetch = +refs/heads/*:refs/remotes/dev/*
[remote "pro"]
    url = http://pro.foobar.com/foo.git
    fetch = +refs/heads/*:refs/remotes/pro/*

[remote "all"]
    url = http://dev.foobar.com/foo.git
    url = http://pro.foobar.com/foo.git

[http]
    postBuffer = 524288000

并且命令;

git push all --all

致谢:同时推送到多个Git仓库


[remote "all"]下为什么要有两个url - MiniGod
链接已失效。 - Jazzepi
@MiniGod 他重复了网址,导致“all”命令同时被推送到两个网址。 - Radon8472

4
你可以执行一个
 git branch | grep "<pattern>" | xargs git push 

<pattern> 替换为正则表达式以匹配您的分支名称,就这样。

如果这是您的此分支的第一次提交,您可以添加 --set-upstream origin


0
不要忘记,如果您在工作树中有未提交的更改并切换分支,则这些更改可能会保留下来。然后您执行add/commit/push操作时,会感到惊讶。

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