【问题标题】:Git pushing to remote branchGit推送到远程分支
【发布时间】:2016-07-08 10:45:10
【问题描述】:

我尝试关注this post,但感到困惑而不是解决我的问题。

这里是场景。

我创建了一个类似git checkout -b <branch_name> 的分支。然后我进行了一些更改并做到了

  1. git add .
  2. git commit -m "comment"

现在所有这些更改都在我未提交的本地 <branch_name> 分支中。我想做的是将这些更改推送到上游,但我想将其推送到不存在的分支,例如<branch_name>_test

我不想把它推送到我的<branch_name>。我怎么能这样做。

【问题讨论】:

    标签: git


    【解决方案1】:

    只需将此分支推送到不同的分支名称

     git push -u origin localBranch:remoteBranch
    

    【讨论】:

    • 请注意,如果您不包含-u--set-upstream 标志,则每次推送时都必须输入整个命令。 git push 在设置上游之前不会单独工作。
    • 你知道......像-u 这样的标志真的让初学者感到困惑。只需键入整个命令并了解其工作原理。我喜欢这个简单的答案。
    【解决方案2】:

    首先,让我们注意git push“需要”另外两个参数,如果您不提供它们,它们会自动组成。因此,基本命令是git push <em>remote</em> <em>refspec</em>

    remote 部分通常是微不足道的,因为它几乎总是只是单词origin。更棘手的部分是 refspec。最常见的是,人们在这里写一个分支名称:例如git push origin master。这使用您的本地分支推送到远程上同名的分支1,如有必要,创建它。但它不一定是只是一个分支名称。

    特别是,refspec 有两个以冒号分隔的部分。对于git push,左边的部分标识要推送的内容2,右边的部分标识要给遥控器的名称。在这种情况下,左边的部分是 branch_name,右边的部分是 <i>branch_name</i>_test。例如:

    git push origin foo:foo_test
    

    当您进行推送时,您可以告诉您的git push 同时设置您的分支的上游名称,方法是将-u 添加到git push 选项中。设置上游名称使您的 git 保存 foo_test(或其他)名称,以便将来的 git push 没有参数,当您在 foo 分支上时,可以尝试推送到 foo_test 上远程(git 还保存远程,在这种情况下origin,因此您也不必输入)。

    你只需要传递一次-u:它基本上只是为你运行git branch --set-upstream-to。 (如果您稍后再次传递-u,它会重新运行上游设置,按照指示更改它;或者您可以自己运行git branch --set-upstream-to。)

    但是,如果你的 git 是 2.0 或更高版本,并且你没有设置任何特殊配置,你会遇到让我在上面输入脚注 1 的同样的事情:push.default 将被设置为 simple,它将拒绝推送,因为上游的名称与您自己的本地名称不同。如果将push.default 设置为upstream,git 将停止抱怨——但最简单的解决方案是先重命名本地分支,以便本地和远程名称匹配。 (设置什么设置,和/或是否重命名您的分支,由您决定。)


    1更准确地说,git 会参考您的 remote.<em>remote</em>.push 设置来导出 refspec 的上游一半。如果您在此处没有设置任何内容,则默认是使用相同的名称。

    2这不一定是分支名称。例如,您可以在此处提供 HEAD 或提交哈希。如果您使用的不是分支名称,您可能必须在右侧拼出完整的refs/heads/<em>branch</em>(这取决于遥控器上已有的名称)。

    【讨论】:

      【解决方案3】:

      git push --set-upstream origin &lt;branch_name&gt;_test

      --set-upstream 设置本地分支和远程分支之间的关联。你只需要第一次做。在随后的推送中,您可以这样做:

      git push

      如果您还没有设置origin,请使用:

      git remote add origin &lt;repository_url&gt; 然后重试上述命令。

      【讨论】:

      • 正如我所提到的,我不想将它推送到我的分支&lt;branch_name&gt;。我想把它推到一个新的分支&lt;branch_name&gt;_test,它现在还不存在
      • 抱歉,没看到。更新了我的答案。您可以随意命名远程分支,只需调整push 命令中的最后一个参数即可。
      【解决方案4】:

      您可以将本地分支推送到 new 远程分支,如下所示:

      git push origin master:test
      

      (假设origin 是您的远程,master 是您的本地分支名称,test 是您要创建的新远程分支的名称。)

      如果同时您想设置本地分支来跟踪新创建的远程分支,您可以使用-u(在较新版本的 Git 上)或--set-upstream 来实现,所以:

      git push -u origin master:test
      

      git push --set-upstream origin master:test
      

      ...将根据您的本地master,在远程存储库origin 中创建一个名为test 的新远程分支,并且设置您本地的master 来跟踪它.

      【讨论】:

        【解决方案5】:

        对于现代 Git 版本,要使用的命令是:

        git push -u origin <branch_name_test>
        

        这将自动将分支名称设置为远程跟踪并一次性推送。

        【讨论】:

          猜你喜欢
          • 2011-09-10
          • 2012-07-25
          • 1970-01-01
          • 2015-08-14
          • 2014-02-04
          • 2016-10-25
          • 2018-12-22
          • 2017-07-22
          • 2020-12-31
          相关资源
          最近更新 更多