2012-10-21 29 views
26

我从来没有使用git之前GitHub发布了Windows应用程序,所以我从来没有在命令行中使用它。如何从多个提交中推送多个分支?

所以这是我的情况:
我做了一些提交master,然后切换分支,并做了一些提交。没有推到GitHub。 当我在Windows应用程序(我认为是git push)中点击sync时,令我惊讶的是,我所有的提交都被推送到了我的新分支 - 甚至是我在master时所做的提交。

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

回答

47

为推动各分行(下裁判/头裁判),请使用以下命令(其中产地为远程):

git push origin --all 

你也可以在你的配置,推动设置push.defaultmatching默认情况下,所有分支在两端都具有相同的名称。例如:

git config --global push.default matching 

因为Git 2.0默认是simple这是最安全的选项。

7

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

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

我不相信有什么简单的或可能会意外地做,将两个不同的分支提交到同一分支,并进行远程合并。

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

如果是这样,当您“切换分支”时,您可能在之后分支出主,因此新分支具有历史中的所有提交,而不仅仅是该分支唯一的提交。

+1

我不知道你最后的建议,我会说这个命令只是'git push origin branchOne anotherBranch' – Drealmer

+2

我认为新版本的git不会推送所有跟踪分支:http://stackoverflow.com/ a/13148313/586086 –

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

+0

为什么你在'[remote'all“]'下有两次'url'? – MiniGod

+0

这是一个错字,编辑。 TNX! –

13

如果你想要把一些特定的分支(例如BRANCH1和BRANCH2),可以使用:

git push origin branch1 branch2 

在Git中> = 2.4这个操作可以原子地完成(即如果它不能推动任何指定的分支将不会被推):

git push --atomic origin branch1 branch2 
+0

它不起作用。它只推送到分支1 – Adnan

相关问题