【问题标题】:How to push multiple branches from multiple commits?如何从多个提交中推送多个分支?
【发布时间】:2012-10-11 14:54:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: git github


    【解决方案1】:

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

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

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

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

    如果是这样,当您“切换分支”时,您可能在 完成新提交之后从 master 分支,因此新分支包含历史中的所有提交,而不仅仅是唯一的提交到那个分支。

    【讨论】:

    • 我不确定你最后的建议,我会说命令只是git push origin branchOne anotherBranch
    • 我认为较新版本的 git 不会推送所有跟踪分支:stackoverflow.com/a/13148313/586086
    【解决方案2】:

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

    git push origin --all
    

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

    git config --global push.default matching
    

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

    【讨论】:

    • 为了澄清上述评论,根据 push 的文档:“特殊的 refspec :(或 +: 允许非快进更新)指示 Git 推送“匹配”分支:本地存在的每个分支,如果远程端已经存在同名分支,则更新远程端。"。
    【解决方案3】:

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

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

    【讨论】:

    • 为什么url[remote "all"]下面有两次?
    • 链接已损坏。
    • @MiniGod 他的 url 是远程“all”同时推送到两个 url 的两倍
    【解决方案4】:

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

    git push origin branch1 branch2 
    

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

    git push --atomic origin branch1 branch2 
    

    【讨论】:

      【解决方案5】:

      你可以做一个

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-01-14
        • 1970-01-01
        • 2016-11-02
        • 2023-04-02
        • 1970-01-01
        • 2022-06-23
        • 1970-01-01
        • 1970-01-01
        • 2019-11-09
        相关资源
        最近更新 更多