首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git分支名称更改已提交,但未推送到原点

Git分支名称更改已提交,但未推送到原点
EN

Stack Overflow用户
提问于 2018-05-07 15:29:54
回答 2查看 174关注 0票数 1
  1. 创建了一个新分支,例如branch-1
  2. 更改代码并提交,但未推送
  3. 将分支重命名为branch-2,并更改和提交代码。
  4. 将更改推到git。

被推送的分支是名为branch-1还是branch-2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-07 17:15:25

完整的答案有点长,但根据你的评论,简短的答案是:

我用了git push origin master

除了master之外,您没有推动其他任何东西,所以这些其他分支名称都没有涉及到。

冗长的答案

值得从以下几个方面开始:git push的语法是:

git push remote refspec1 refspec2 ... refspecN

也就是说,命令中的单词origin是远程的,而单词master是refspec (而且您使用的正是一个这样的refspec,尽管您可以推送多个refspec)。

这里的远程参数只是Git所称的遥控器的名称,我承认它是一个循环定义,并不十分有用。但是我们可以通过示例来定义它:origin是一个远程的,在大多数情况下,origin是您唯一的远程。因此,git push origin ...中的第三个词始终是origin。只有在使用git远程添加(单击链接查看其文档)添加更多遥控器时,才会在这里编写任何不同的内容。

更有趣的部分是改装。refspec在其第二个最简单的形式中,只是由冒号(如master:master )分隔的一对名称(通常是分支名称)。冒号左侧的名称是源引用,右侧的名称是目标引用。如果你写:

代码语言:javascript
复制
git push origin master:master

您要求您的Git调用另一个Git,在存储在origin名称下的URL上,并让您的Git请求Git设置它们的master-the :master部件--就像您设置自己的mastermaster:mastermaster:部分一样。

我说过这是第二个最简单的形式,因为最简单的形式只是写你自己的分支名称。当您这样做时,Git假设--至少对于git push --您希望在另一边设置相同的名称,因此master只是master:master的缩写。

如果你想让你的Git让他们的Git设置他们的branch-2,你必须在参考规范中放一些master以外的东西。例如,您可以运行:

代码语言:javascript
复制
git push origin branch-2:branch-2

要求他们的Git根据你的branch-2设置他们的branch-2。您可以通过省略:branch-2部分来缩略这一点。请注意,您还可以:

代码语言:javascript
复制
git push origin master:branch-2

这要求他们的Git设置他们的branch-2基于您的master,而不是您的branch-2

如果您这样做,您将发现git push的其他一些有趣的方面。具体地说:

  • 您自己的Git有一个配置设置push.default,它(如果您的Git不是太古老的话)默认为simple
  • 如果您的push.default设置为simple,则Git“希望”将master推送到master,将branch-2推送到branch-2。(如果将push.default设置为其他值,则Git将具有不同的执行功能。)
  • simple设置意味着只要为每个分支设置上游,就可以只运行git push。 git推送 将获取当前分支的上游设置(不管是什么),并将其用于git push到相应的远程上同名的分支。

要使最后一步有效,您需要分支名master的上游为origin/master,分支名称branch-2的上游为origin/branch2。那么,上游到底是什么?

分支名称的上游设置

每个分支可以有一个上游(1)。一条支路可能在根本没有上游的情况下启动。由于历史原因,上游实际上由两部分组成,但您可以将其设置为:

代码语言:javascript
复制
git branch --set-upstream-to=origin/branch2 branch2

例如,将branch2的上游设置为origin/branch2

通常,任何名为X的分支的上游都是origin/Xsimple设置push.default需要这种匹配的名称,这意味着如果您重命名一个分支,您还必须更改它的上游(如果它之前有一个)。

在设置一个分支的上游有一个皱纹,特别是在你刚刚创建它之后。您刚刚创建了branch-2-well,从技术上讲,您创建了branch-1,然后将其重命名为branch-2,但这等同于相同的事情--因此Git over at origin还没有一个名为branch-2的分支。这意味着您自己的Git还没有一个origin/branch-2,因为您的Git's origin/*名称是您的Git的方式来记住他们的Git有什么,而他们的Git还没有这个。

归根结底,在你创建了一个分支之后,当你第一次推它的时候,你必须拼出它的全部推杆:

代码语言:javascript
复制
git push origin branch-2

例如,或:

代码语言:javascript
复制
git push origin branch-2:branch-2

如果你想说清楚的话。一旦您这样做了,您就可以使用git branch --set-upstream-to

代码语言:javascript
复制
git push origin branch-2
git branch --set-upstream-to=origin/branch-2 branch-2

因为push步骤在原点上创建branch-2,在此之后,您的Git会通过创建您自己的origin/branch-2来记住它们的Git有一个branch-2。(呜呜!)

不过,这是一条捷径。与键入两个命令不同,您可以使用一个命令:

代码语言:javascript
复制
git push -u origin branch-2

这里的-u选项告诉git push,它应该尝试push,如果成功,它将立即为您运行git branch --set-upstream-to

完成此操作后,branch-2origin/branch-2作为其上游,因此,当您签出branch-2时,您可以运行:

代码语言:javascript
复制
git push

您的simple设置push.default将告诉git push,它应该查找上游(origin/branch-2),并使用它将branch-2推送到originbranch-2

票数 0
EN

Stack Overflow用户

发布于 2018-05-07 17:05:08

正如你在评论中已经说过的。您使用的git push origin master来源是您的远程名称,并掌握您的分支名称。这就是你把它推到你的master分支的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50217699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档