我是git的新手,我正在练习。我创建了一个本地分支,但我看到当我做git push时,我的分支没有上传到存储库。我实际上必须这样做:git push -u origin --all. 为什么会这样?分支难道不是默认情况下要推送的新更改吗?为什么我需要执行第二个命令?< / p >
git
git push
git push -u origin --all
推送一个新分支时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的简称)标志来指定。
-u
--set-upstream
为什么会这样?我猜实现者认为在远程上创建分支是一项非常重要的操作,因此应该很难出错。git push是你一直在做的事情。
“分支难道不是默认情况下推出的新更改吗?”我会说Git中的“一个更改”是一个提交。分支是指向提交的指针。对我来说,将push看作是将提交推到其他存储库的东西更有意义。推送哪些提交取决于您所在的分支以及该分支与远程上的分支之间的跟踪关系。
你可以在远程分支章节的专业Git书中阅读更多关于跟踪分支的信息。
我无法这么快就从最初的开发人员那里找到一个基本原理,但我可以根据几年的Git经验给您一个有根据的猜测。
不,不是每个分支都是你想要推向外部世界的东西。它可能代表一个私人实验。
此外,git push应该将所有分支发送到哪里?Git可以与多个遥控器一起工作,您可能希望在每个遥控器上有不同的分支集。例如,一个中心项目GitHub回购可能有发布分支;GitHub分支可能有主题分支供审查;本地Git服务器可能有包含本地配置的分支。如果git push将所有分支推到当前分支跟踪的远程,这种方案很容易搞砸。
实际原因是,在一个新的repo (git init)中,有没有分支(没有master,根本没有分支,零分支)
master
因此,当你第一次推送到空 上游回购(通常是生一个)时,上游回购没有同名的分支。
和:
matching
simple
在这两种情况下,由于上游空回购没有分支:
这意味着你的本地第一个推送不知道:
所以你至少需要做一个:
git push origin master
但如果你只这样做,你:
origin
这就是为什么建议,在第一次推送时,做一个:
git push -u origin master
或者,使用Git 2.37和新的全局选项push.autoSetupRemote:
push.autoSetupRemote
git config --global push.autoSetupRemote true git push
这将把origin/master记录为远程跟踪分支机构,并将使下一次推送自动将master推到origin/master。
origin/master
git checkout master # Git 2.23+ git switch master git push
current
upstream
你不知道,请看下面
我觉得这个“功能”相当烦人,因为我并不是想把火箭发射到月球上,只是推我该死的树枝。你可能也知道,否则你就不会在这里了!
下面是修复方法:如果你想隐式地推入当前分支,而不管该分支是否存在于原点,只要发出这个命令一次,你将不得不在任何地方再次从来没有:
git config --global push.default current
如果你做这样的分支:
git checkout -b my-new-branch
然后做一些提交,然后做
git push -u
让它们回到原点(在那个分支上)如果分支不存在,它会为你创建这个分支。
注意-u位确保如果您稍后要从该分支进行拉取,则它们是链接的。如果您不打算稍后再拉这个分支(或者如果您这样做的话,可以使用另一个代码行)-u是不必要的。
HEAD是当前分支的缩写,所以git push -u origin HEAD工作。现在,为了避免每次我使用alias时键入这种类型:
Git配置——全局别名。pp 'push -u origin HEAD'
在此之后,每次我想通过git -b branch创建分支时,我都可以使用:
git页
希望这能为别人节省时间!
第一次检查
git remote -v
git remote rm origin
步骤3:git config --global user.email "youremail@example.com"
git config --global user.email "youremail@example.com"
步骤4:git initial
git initial
git commit -m "Initial Project"
步骤6:git remote add origin %repo link from bitbucket.org%
git remote add origin %repo link from bitbucket.org%
步骤7:git push -u origin master
如果你第一次启用从你的新分支推送新更改。 和下面的错误:
*git push -f fatal: The current branch Coding_Preparation has no upstream branch.
要推动当前分支并将远程设置为上游,请使用
git push -u origin new_branch_name ** Successful Result:** git push -u origin Coding_Preparation Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 599 bytes | 599.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: remote: Create a pull request for 'Coding_Preparation' on GitHub by visiting: ... * [new branch] Coding_Preparation -> Coding_Preparation Branch 'Coding_Preparation' set up to track remote branch 'Coding_Preparation' from 'origin'.
我刚刚经历了这个问题的进一步排列。
我有一个分支命名为feat/XYZ-1234-some-description,因为我在Jira第1234期工作。在工作期间,我创建了一个新的Jira问题来跟踪一个较小的工作,当我来推送时,我决定推送到一个带有这个新问题编号的分支名称:
feat/XYZ-1234-some-description
git push -u origin feat/XYZ-5678-a-different-description # failed
这给了我在这个SO线程中讨论的错误。但由于我试图从当前分支推到不同的分支名称,我的问题与这里描述的不同。我最终重命名了我的本地分支之前,我可以推它:
git branch -m feat/XYZ-1234-some-description feat/XYZ-5678-a-different-description git push -u origin feat/XYZ-5678-a-different-description # now works
src
HEAD
git push -u origin feat/XYZ-1234-some-description:feat/XYZ-5678-a-different-description # also works