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

时间:2018-05-07 15:29:55

标签: git github

  1. 创建了一个新分支,例如branch-1
  2. 更改了代码并已提交但未推送
  3. 将分支重命名为branch-2,代码已更改并已提交。
  4. 将更改推送到git
  5. 推送的分支是否被命名为branch-1branch-2

2 个答案:

答案 0 :(得分:0)

正如您在评论中所说的那样。 您使用git push origin master,其中origin是您的远程名称并掌握您的分支名称。这就是你将它推到master分支的原因。

答案 1 :(得分:0)

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

  

我使用了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 remote add (click link to see its documentation)添加更多遥控器才能在这里写出不同的东西。

更有趣的部分是refspec。 refspec 是第二种最简单的形式,只是一对名称 - 通常是分支名称 - 用冒号分隔,例如master:master。冒号左侧的名称是源引用,右侧的名称是目标引用。如果你写:

git push origin master:master

你要求你的Git在名称origin下存储的网址上调用另一个Git,然后让你的Git让他们的Git设置他们的 master - :master部分 - 与您设置自己的mastermaster:的{​​{1}}部分相同。

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

如果您希望让Git让他们的Git设置他们的 master:master,您必须在refspec中添加branch-2以外的内容。例如,您可以运行:

master

要求他们的Git根据您的git push origin branch-2:branch-2 设置branch-2。您可以通过省略branch-2部分来缩写。请注意,您也可以这样做:

:branch-2

要求他们的Git根据您的git push origin master:branch-2 设置branch-2,而不是master

如果您执行其中任何一项,您会发现branch-2的其他一些有趣的方面。具体做法是:

  • 你自己的Git有一个配置设置git push,如果你的Git不太古老,默认为push.default
  • 如果您的simple设置为push.default,则Git"需要"将simple推送到mastermaster推送到branch-2。 (如果您的branch-2设置为其他值,Git会执行不同的操作。)
  • push.default设置意味着您只需运行simple提供为每个分支设置上游

    git push

    将采用当前分支的上游设置,无论是什么,并将其用于git push 同名的分支上适当的遥控器。

要使最后一位有效,您需要将分支名称git push的上游设为master,将分支名称origin/master的上游设为branch-2 。那么,上游究竟是什么?

分支名称的上游设置

每个分支可以有一个(1)上游。分支可以从没有上游开始。由于历史原因,上游实际上由两部分组成,但您可以使用:

进行设置
origin/branch2
例如,将git branch --set-upstream-to=origin/branch2 branch2 的上游设置为branch2

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

设置分支的上游时会出现皱纹,尤其是在刚刚创建分支之后。您刚刚创建了push.default - 从技术上讲,您创建了branch-2,然后将其重命名为branch-1,但这相同,所以Git结束于branch-2 < em>没有名为origin的分支。这意味着你自己的Git还没有branch-2,因为你Git的origin/branch-2名字是你Git记住他们的Git所拥有的方式,而他们的Git没有&#39}但是还有这个。

这归结为在创建分支后,第一次推送它,必须拼出完整的推送:

origin/*
例如

,或者:

git push origin branch-2

如果你想完全明确它。 完成后,您可以使用git push origin branch-2:branch-2

git branch --set-upstream-to

因为git push origin branch-2 git branch --set-upstream-to=origin/branch-2 branch-2 步骤在原点上创建了 push,之后你的Git通过创建自己的{{1}来记住他们的Git有branch-2 }。 (呼!)

尽管如此,还是有一个捷径。您可以使用单个命令来代替输入两个命令:

branch-2

origin/branch-2选项告诉git push -u origin branch-2 它应该尝试推送,如果成功,请立即为您运行-u

完成此操作后,git push上游有git branch --set-upstream-to,因此当您branch-2签出时,您可以运行:

origin/branch-2

并且branch-2的{​​{1}}设置会告诉git push 它应该查找上游(simple)并使用它来推送push.defaultgit push&#39; origin/branch-2