60

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

所以这是我的情况:
我在 上做了一些提交master,然后切换了分支并在那里做了一些提交。所有这些都无需推送到 GitHub。然后,当我单击syncWindows 应用程序(我假设确实如此git push)时,令我惊讶的是,我所有的提交都被推送到了我的新分支——甚至是我在master.

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

4

5 回答 5

94

要推送所有分支(refs/heads 下的 refs),请使用以下命令(其中 origin 是您的遥控器):

git push origin --all

您还可以在配置中设置push.defaultmatching默认情况下在两端推送所有具有相同名称的分支。例如:

git config --global push.default matching

从 Git 2.0 开始,默认设置是simple最安全的选项。

于 2013-01-26T20:13:57.547 回答
77

如果你想推送几个特定的​​分支(例如 branch1 和 branch2),你可以使用:

git push origin branch1 branch2 

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

git push --atomic origin branch1 branch2 
于 2016-09-29T08:39:13.040 回答
9

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

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

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

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

如果是这样,当您“切换分支”时,您可能会在新提交完成从 master分支,因此新分支包含历史中的所有提交,而不仅仅是该分支独有的提交。

于 2012-10-21T18:03:28.437 回答
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 存储库

于 2013-09-17T09:42:26.117 回答
2

你可以做一个

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

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

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

于 2019-06-18T17:44:21.257 回答