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

时间:2012-10-21 17:58:33

标签: git github

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

所以这是我的情况:
我在master做了一些提交,然后切换了分支并在那里做了一些提交。所有这一切都没有推向GitHub。 当我在windows应用程序中单击sync时(我假设它git push),令我惊讶的是,我的所有提交都被推送到我的新分支 - 甚至是我在{I}时所做的提交{1}}。

由于这是Windows应用程序的行为,我想我必须使用命令行 什么是正确的master命令将提交推送到遥控器上的正确分支?

5 个答案:

答案 0 :(得分:58)

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

git push origin --all

您还可以在配置中将push.default设置为matching,以默认推送两端具有相同名称的所有分支。例如:

git config --global push.default matching

从Git 2.0开始,默认值为simple,这是最安全的选项。

答案 1 :(得分:36)

如果要推送多个特定分支(例如branch1和branch2),可以使用:

git push origin branch1 branch2 

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

git push --atomic origin branch1 branch2 

答案 2 :(得分:8)

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

git push origin my-new-branch将推动您的新分支。

我不相信有任何简单或可能的意外做法会将提交从两个不同的分支推送到同一分支并在远程执行合并。

我猜这个新分支在它的历史中有来自master的提交。要查看是否属实,请在本地运行git log my-new-branch,查看这些提交是否在您的历史记录中。

如果是这样,当您“切换分支”时,您可能会在之后对主进行分支,因此新分支具有历史记录中的所有提交,而不仅仅是唯一的提交那个分支。

答案 3 :(得分:4)

迟到的答案,但我将分享我的解决方案,对我有用。

最后我的/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

致谢: Pushing to Multiple Git Repositories Simultaneously

答案 4 :(得分:1)

您可以做

 git branch | grep "<pattern>" | xargs git push 

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

如果这是您对该分支的首次提交,则可以添加--set-upstream origin