为什么我需要明确推送新分支?

我在新的git ,我练习。 我创建了一个本地分支,但我看到,当我做git push我的分支没有上传到存储库。 我必须做到: git push -u origin --all
为什么是这样? 是不是一个分支是默认推送的新变化? 为什么我需要运行第二个命令?


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

所以当你第一次推到一个空的上游仓库(通常是空仓仓库)时,那个上游仓库没有同名的分支。

和:

  • 默认推送策略是“ matching ”(推送所有相同名称的分支,如果它们不存在则创建它们),
  • 默认推送策略现在是' simple '(只推送当前分支,并且只有在上游有一个类似命名的远程跟踪分支,因为git 1.7.11)
  • 在这两种情况下,由于上游空回购没有分支:

  • 还没有匹配的命名分支
  • 根本没有上游分支(有或没有相同的名字!是否跟踪)
  • 这意味着你的本地首推并不知道:

  • 在哪里推
  • (因为它找不到任何上游分支被记录为远程追踪分支,和/或具有相同的名称)
  • 所以你至少需要做一个:

    git push origin master
    

    但是,如果你只这样做,你:

  • 将在上游(现在非空回购)创建一个上游master分支:好。
  • 不会记录本地分支' master '需要被推送到上游( origin )' master '(上游分支):不好。
  • 这就是为什么建议首先要做一个:

    git push -u origin master
    

    这会将origin/master记录为远程追踪分支,并且将启用下一次推动以自动将master推送到origin/master

    git checkout master
    git push
    

    而且这也将推动政策“ current ”或“ upstream ”。
    在每种情况下,在最初的git push -u origin master ,一个简单的git push将足以继续将主控推向右上游分支。


    你不要,见下文

    我觉得这个'特点'很烦人,因为我不是试图向月球发射火箭,只是推动我该死的分支。 你可能也会这样做,否则你不会在这里!

    这里是解决方法:如果您希望它隐式推送当前分支,而不管该分支是否存在于原始位置,则只需发出一次该命令,而不再需要再次执行任何操作:

    git config --global push.default current
    

    所以如果你制作这样的分支:

    git checkout -b my-new-branch
    

    然后做一些提交,然后做一个

    git push -u
    

    让他们出来(在那个分支上),如果它不存在,它会为你创建分支。

    请注意,如果您稍后从所述分支中拉出,-u位确保它们已链接。 如果你以后没有计划将分支拉回来(或者如果你这样做的话,可以用另一个班轮行) - 没有必要。


    git push新分支时输出git push

    > 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书籍的“远程分支”章节中有关跟踪分支的更多信息。

    链接地址: http://www.djcxy.com/p/26097.html

    上一篇: Why do I need to explicitly push a new branch?

    下一篇: git pull error :error: remote ref is at but expected