致命:当前分支主机没有上游分支


227

我正在尝试将我的一个项目推送到github,并且不断收到此错误:

peeplesoft@jane3:~/846156 (master) $ git push

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

     git push --set-upstream origin master

所以我尝试了一下,得到了:

peeplesoft@jane3:~/846156 (master) $ git push --set-upstream origin master

fatal: Authentication failed

另一个stackoverflow线程建议我尝试以下操作,但结果令人失望。

peeplesoft@jane3:~/846156 (master) $ git push -u origin master

fatal: Authentication failed

然后我尝试了这个:

peeplesoft@jane3:~/846156 (master) $ git config remote.origin.push HEAD

peeplesoft@jane3:~/846156 (master) $ git push

fatal: Authentication failed

有什么提示吗?


1
该存储库必须存在于github上,然后才能进行推送。可以?您正在使用它的克隆库吗?
马特,2014年

我从Github克隆了回购协议,然后在自述文件中添加了1行,然后尝试将其退回。
user1524361 2014年

1
我居然也得到了同样的错误,因为我忘了提交的文件
MATEEN

3
-u和--set-upstream相同
brainLoop

想要让所有人都知道gitOP发布的命令帮助了我,甚至超过了答案
Nathan

Answers:


93

您已修复了推送,但是,与该推送问题无关(我在“ 为什么需要显式推送新分支? ”:git push -u origin master或中对此进行了说明git push -u origin --all),现在需要解决身份验证问题。

这取决于您的网址(如'中的ssh git@github.com/yourRepo或中的https https://github.com/You/YourRepo

对于https网址:

如果您的帐户受两因素身份验证保护,则您的常规密码将不起作用(对于https url),如此处 或此处所述

如果您的密码包含特殊字符(如此答案),则会出现同样的问题

如果https不起作用(因为您不想生成辅助密钥,即PAT:个人访问令牌),则可以切换到ssh,如我在此处所示


正如qwerty在评论中指出的那样,您可以使用以下命令自动在遥控器上创建相同名称的分支:

git push -u origin head 

为什么?

  • HEAD(看你的.git\HEAD文件)具有当前签出分支的Refspec(例如:ref: refs/heads/master
  • 默认的推送策略简单

由于用于此推送的refpec是head :(无目的地),因此缺少:<dst>表示与<src>(head是分支)更新相同的ref的方法。

如果HEAD被分离,行不通的。


1
太棒了,这是我们需要解决根本原因的问题,而不仅仅是解决表面问题
workplaylifecycle '19

如果您在任何分支上,这将很有用git push origin head -u。在遥控器上自动创建相同名称的分支。
Qwerty

1
@Qwerty谢谢,很好。我将您的评论(以及其他详细信息)包含在答案中,以提高可见度。
VonC

115

您也可以使用以下命令:

git push -u origin master

这将在您的远程存储库中创建(-u)另一个分支。一旦完成了使用ssh的身份验证。


2
这确实与问题有关,因为问题与身份验证有关。他还说他已经在帖子中尝试过了。
Mike Precup 2014年

2
我投票有两个原因。第一个:OP表示他已经尝试过了。第二个:-uoption是该选项的快捷方式,--set-upstream它与创建新分支无关。-uor --set-upstream选项文档中:“对于每个最新的或成功推送的分支,添加上游(跟踪)引用,该引用由无参数git-pull [1]和其他命令使用。” 其实我不明白为什么这个答案被误导了这么多。
louisfischer

38

显然,当您--all在第一次推送时忘记了参数时,也会收到此错误消息。我写

git push -u origin

这给了这个错误,应该是

git push -u origin --all

哦,我多么喜欢这些复制粘贴错误...


3
谢谢。我在Visual Studio Code中遇到了这个错误,并且可以正常工作,但是在多个开发人员的背景下,有人可以解释这是怎么做的吗?
Hell.Bent'5


13

请尝试这种情况

git push -f --set-upstream origin master

7
您应该提供有关其工作方式和原因的更多说明。
贝诺·拉丁

6
“不错”是对任何事情的真正不好的解释。“不错”会使您的答案真的很糟糕。
GhostCat

这无法解决提到的错误OP:“身份验证失败”
肖恩·比恩

是。它确实为我工作。我认为这迫使提交到上游(远程)分支。
vkg

12

如果定义了操作git push,则在命令行上未提供refspec的情况下,如果在远程服务器上未配置refspec,并且在命令行上提供的任何选项都没有隐含refspec,则应该采取该措施。

去做就对了:

git config --global push.default current

然后

git push

1
您需要注意,这确实会更改全局git设置,这可能会产生一些不利影响。但这正是我想要的。
Mavamaarten

@Mavamaarten潜在的不良反应是什么?
kosii

7

好吧,我在上传时遇到了同样的麻烦,并且通过执行它说的相同的操作来解决了这个问题:早些时候,我试图通过https将终端推送到Linux中的存储库,例如

git push https://github.com/SiddharthChoudhary/ClientServerCloudComputing.git

但是没有得到任何结果,因此我更深入地尝试:

git push --set-upstream https://github.com/SiddharthChoudhary/ClientServerCloudComputing.git master

而且有效。这样,您将得到提示,输入用户名和密码。我还生成了令牌,并且粘贴了令牌,因此成功完成了它而不是密码。

  1. 要生成令牌,请转到您的Github帐户并在“开发人员设置”中,然后创建另一个令牌。
  2. 获取密码后,请复制该令牌,并在出现提示时将其粘贴在密码提示中。

6

在非常简单的方面,一旦拥有其他分支,就不能仅用于推送分支

git push

但是,即使您已签出要推送的分支,也需要立即指定分支,因此

git push origin <feature_branch>

哪有master分支


5

我犯了一个忘记提交的简单错误:

git commit -m "first commit"

然后git push origin master工作。


4

我有同样的问题

在此处输入图片说明

我解决了以下命令

$ git branch --set-upstream develop origin/develop

它将在.git文件夹的配置文件中添加一个配置。

在此处输入图片说明



3

有一个简单的解决方案可以在macOS Sierra上为我工作。我执行了以下两个命令:

git pull --rebase git_url(Ex: https://github.com/username/reponame.git)
git push origin master

如果在以后进行任何推送后,它显示有关上游的任何致命错误,则只需运行:

git push --set-upstream origin master

0

1.一台计算机和您的github相关联。使用SSH。计算机代码,因此您无需在此处提交经过验证的输入图像描述

2. git无法管理空文件夹。因此,您必须编写一个保存在文件中的readme.md文件。否则,您将找不到该文件。

3.您的本地项目没什么新项目可以转移。请

git init

git remote add origin +"githublink"

git add .

git commit -m "" 再去一次。

4.然后git pull origin master(关键)

5.最后git push origin master(解决所有问题)。

http://my.oschina.net/psuyun/blog/123005参考链接


0

如果您尝试将代码直接推送到master分支,请使用命令

git push origin master

它帮助到我。


0

我也遇到了同样的错误,我认为这是因为我克隆了它并试图往后推。 $ git push -u origin master 这是正确的命令。

计数对象:8,完成。增量压缩最多使用2个线程。压缩对象:100%(4/4),已完成。写入对象:100%(8/8),691个字节| 46.00 KiB / s,已完成。总计8(增量1),重用0(增量0)远程:解决增量:100%(1/1),已完成。

  • [新分支] master-> master分支master设置为从源跟踪远程分支master。

    It was successful. Try to create new u branch 
    

0

我有同样的问题,原因是我忘记指定分支

git push myorigin feature/23082018_my-feature_eb

0

对我来说,我正在将更改推送到一个我没有写访问权的私人仓库中。执行推或拉操作时,请确保您具有有效的访问权限。

您可以通过直接验证


1
“直接验证通过”是什么?
Mike Poole

0

对我来说,这是因为我删除了隐藏的.git文件夹。

我通过删除文件夹,重新克隆并重新进行更改来修复它。


0

如果您在任何分支机构中,都可以使用此命令:

git push origin head -u

这将自动在遥控器上创建相同名称的新分支。


-1

要解决此问题,在从git自身中签出代码时,您需要给出如下命令:

git checkout -b branchname origin/branchname

在这里,默认情况下,我们正在设置the upstream branch,因此您将不会遇到上述问题。


-2

对我来说,问题出在我分支的名称上:“#name-of-my-branch”,如果没有“#”,它就可以正常工作!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.