2012-10-21 30 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

相關問題