关于git:为什么我需要明确地推送一个新的分支?

Why do I need to explicitly push a new branch?

我是新来的江户人,我在练习。我创建了一个本地分支,但我发现当我创建git push时,我的分支没有上传到存储库。我不得不这么做:江户十一〔二〕。这是为什么?默认情况下,分支不是要推送的新更改吗?为什么需要运行第二个命令?


实际原因是,在新回购(git init)中,没有分支(没有master,根本没有分支,没有分支)

因此,当您第一次推动空的上游回购(通常是空的)时,上游回购没有同名的分支。

还有:

  • 默认的推送策略是"matching"(推送同名的所有分支,如果它们不存在则创建它们)。
  • 默认的推送策略现在是"simple"(仅推送当前分支,并且仅当它在上游具有类似名称的远程跟踪分支时,从Git 1.7.11开始)

在这两种情况下,由于上游空回购没有分支:

  • 还没有匹配的命名分支
  • 没有上游分支(有或没有相同的名称!是否跟踪)

这意味着你的本地首次推送不知道:

  • 往哪儿推
  • 推什么(因为它找不到任何上游分支记录为远程跟踪分支和/或具有相同名称)

所以你至少需要做一个:

1
git push origin master

但如果你只这样做,你:

  • 将在上游(现在非空回购)创建一个上游master分支:好。
  • 不会记录本地分支机构"EDOCX1"(7)需要推到上游(EDOCX1)(12))"EDOCX1"(7)(上游分支机构):坏。

因此,建议在第一次推送时执行以下操作:

1
git push -u origin master

这将把origin/master记录为远程跟踪分支,并使下一次推送能够自动将master推送到origin/master

1
2
git checkout master
git push

这也适用于"EDOCX1"(17)或"EDOCX1"(18)。在每种情况下,在最初的git push -u origin master之后,一个简单的git push将足以继续将master推到右上游分支。


你没有,看下面

我觉得这个"特性"很烦人,因为我不想把火箭发射到月球上,只要推我该死的树枝就行了。你可能也是,否则你就不会在这里了!

修复方法如下:如果您希望它隐式地推送当前分支,而不管分支是否存在于源站上,只需发出此命令一次,就不必再在任何地方执行此命令:

1
git config --global push.default current

所以如果你做这样的树枝:

1
git checkout -b my-new-branch

然后做出一些承诺然后做一个

1
git push -u

把它们带到原点(在那个分支上),如果它不存在,它会为您创建所说的分支。

注意-u位确保它们是链接的,如果您稍后要从所说的分支上拉。如果你以后不打算拉分支(或者如果你愿意的话可以用另一个一行的话),你就不需要了。


推新分支时git push的输出

1
2
3
4
5
6
7
> git checkout -b new_branch
Switched to a new branch 'new_branch'
> git push
fatal: The current branch new_branch has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin new_branch

简单的git push假设当前本地分支正在跟踪的远程分支已经存在。如果不存在这样的远程分支,并且您希望创建它,则必须使用-u标志(--set-upstream的缩写)指定。

为什么会这样?我想实现人员觉得在远程上创建一个分支是一个非常重要的操作,因此很难出错。git push是你一直在做的事情。

"默认情况下,分支不是要推送的新更改吗?"我会说Git中的"变更"就是承诺。分支是指向提交的指针。对我来说,将推送看作是将提交推送到其他存储库的东西更有意义。推送哪个提交取决于您所在的分支以及该分支与远程分支之间的跟踪关系。

您可以在pro git手册的"远程分支"一章中了解有关跟踪分支的更多信息。


我不能很快找到原始开发人员的理由,但是我可以根据几年的Git经验给你一个有教育意义的猜测。

不,不是每一个分支都是你想向外界推销的东西。它可能代表一个私人实验。

此外,git push应该把所有的分支机构都送到哪里?Git可以使用多个远程设备,您可能希望在每个远程设备上有不同的分支集。例如,中央项目Github repo可能有发布分支;Github fork可能有主题分支供审阅;本地Git服务器可能有包含本地配置的分支。如果git push将所有分支推到当前分支跟踪的远程,这种方案很容易出错。


第一次检查时

步骤一:git remote -v。//如果找到Git初始化,则删除或跳过步骤2

第二步:git remote rm origin。//然后全局配置电子邮件地址git

步骤3:git config --global user.email"[email protected]"

步骤4:git initial

步骤5:git commit -m"Initial Project"。//如果已经添加了项目repo,则跳过步骤6

步骤6:git remote add origin %repo link from bitbucket.org%

步骤7:git push -u origin master


头是当前分支的缩写,所以git push-u origin head工作。现在,为了避免每次使用别名时都输入以下内容:

git config--global alias.pp"push-u origin head"

此后,每当我想推送通过Git-B分支创建的分支时,我都可以使用以下方法推送它:

GIT聚丙烯

希望这能为别人节省时间!