git错误:无法将一些引用推送到远程


448

由于某种原因,我现在不能推动,而昨天却可以。也许我搞砸了配置或其他东西。

这是发生了什么:

当我使用git push origin master

gitbashscr

我的工作目录和远程存储库如下所示:

Windows文件文件夹的屏幕快照,其中包含以下目录:.git,css,js。 以及这些文件:index.php,readme,setsu.php。 带箭头的单词“本地”指向css文件夹。 下面是屏幕截图,标题为“ github”,以及一个css文件夹和index.php文件


7
看起来您的本地存储库与git存储库不同步。你尝试做git pull吗?
R11G 2014年

1
是的,但是在git pull之后我不知道以下语法,它说git pull <remote> <branch>,您能让我看看git pull的示例语法吗?
leipzy 2014年

1
做检查这个类似的问题- stackoverflow.com/questions/18588974/...
R11G

3
@ R11G谢谢您,先生!这个链接帮助我stackoverflow.com/a/18589043/3626672
leipzy 2014年

2
我在一个新的仓库中遇到了这个错误。这有帮助:stackoverflow.com/a/6518774/2067690
HumanInDisguise

Answers:


616

如果您在本地工作时,GitHub存储库中看到有新提交提交,建议您使用:

git pull --rebase
git push

完整语法为:

git pull --rebase origin master
git push origin master

完成一次之后,使用Git 2.6+(2015年9月)

git config --global pull.rebase true
git config --global rebase.autoStash true

一个简单git pull就足够了。
(注意:在Git 2.27 Q2 2020中,a merge.autostash也可用于常规拉动,而无需重新设置基准)

这样的话,你会重播(的--rebase一部分)的本地提交上的最近更新的顶部origin/master(或origin/yourBranchgit pull origin yourBranch)。

请参阅《Git Pocket Book第6章重装基础》中的更完整示例。

我建议:

# add and commit first
git push -u origin master

这将在本地主分支与其上游分支之间建立跟踪关系。
之后,可以使用以下简单的方法完成对该分支的将来任何推送:

git push

请参阅“ 为什么需要显式推送新分支? ”。


由于OP已经复位,重做其承诺之上origin/master

git reset --mixed origin/master
git add .
git commit -m "This is a new commit for what I originally planned to be amended"
git push origin master

没有必要pull --rebase

注意:git reset --mixed origin/master也可以编写git reset origin/master,因为使用时该--mixed选项是默认选项git reset


可以执行建议的git pull --rebase ...吗?因为我已经完成了> git reset --mixed origin / master> git add。> git commit -m“这是我最初打算进行修订的新提交”> git push origin master在这里建议stackoverflow.com/questions/18588974/…btw您的回答对您很有帮助,先生
leipzy

3
对于我来说,我只需要运行“ git commit”。:(
泰勒

谢谢,解决了Git LFS的一个愚蠢问题,结果我不得不放弃现在必须使用命令行的行为。
泰勒

2
真的超级..下面的命令为我工作... git reset --mixed origin / master git add。git commit -m“这是我最初计划修改的新提交” git push origin master谢谢@VonC
Hari Narayanan

1
谢谢!我一直在寻找这个解决方案的时间!
Redion Xhepa

95

有没有人尝试过:

git push -f origin master

那应该解决问题。

编辑:根据下面的@Mehdi的评论,我需要澄清一下—force pushing。上面的git命令仅在第一次提交时安全地工作。如果已经存在提交,先前的拉取请求或分支,则将其全部重置并将其设置为零。如果是这样,请参考@VonC的详细答案以获得更好的解决方案。


25
可行,但不好,除非您知道自己在做什么,否则请不要使用它。(如果您正在寻找SO,那么您可能不知道自己在做什么)
Mehdi

3
如果您要尝试-f/ --force总是更安全--force-with-lease,那么如果下游更改会因推送而阻塞,它将被中止。 --force-with-lease在许多日常调配情况下是必需的,但--force几乎永远不需要。
约书亚·戈德堡

63

如果您刚刚使用git init过文件并添加git add .了类似内容或添加了类似内容并添加了远程分支,则可能是您没有git commit -m 'commit message'在本地提交()任何东西来推送到远程...我只是遇到了这个错误,那是我的问题。


1
刚遇到这个。提交命令在git add期间不起作用。好决定。谢谢
jgritten '18

1
谢啦!而已。我以为我做出了改变。现在git push -u origin master工作正常。
tleo

35

我有同样的问题。我遇到了这个问题,因为我什至没有进行任何提交,甚至没有进行初始提交,但我仍在尝试推送。

一旦我做了git commit -m "your msg",然后一切正常。


8
那没有多大意义。最初的问题是关于本地 git的背后。我进行本地提交绝对不能解决“落后”问题!
GhostCat

哦,我也忘记提交了:p
Shams Nahid

这也是有可能的,它不允许您进行空提交
mboy

3
我只是遇到了这个问题,却忘记了要提交。错误消息应该更清晰
IvanTopić18年

1
自从我收到确切的错误消息以来,它确实适用于我,并且此解决方案解决了我的问题。
迭戈·福特斯

19

重命名您的分支,然后推送,例如:

git branch -m new-name
git push -u new-name

这对我有用。


1
它有效,但是请解释为什么我们应该这样做
kanlukasz

哇,这确实有效,但是为什么呢?我的本地分支名称中有一个连字符my-branch_wont_push。一旦将其重命名为my_branch_wont_push,然后git push -u origin my_branch_wont_push为我工作。
cdabel

13

我在github帮助中找到了解决此问题的方法。

您可以从以下内容中看到它:处理非快进错误

它说:

您可以通过以下方式解决此问题:将在远程分支上所做的更改与本地所做的更改合并:

$ git fetch origin
# Fetches updates made to an online repository
$ git merge origin branch
# Merges updates made online with your local work

或者,您可以简单地使用git pull一次执行两个命令:

$ git pull origin branch
# Grabs online updates and merges them with your local work

1
只要事情按预期进行,这就是正常过程。当git认为它已经按照@rubyandcoffee要求更新时,它没有任何帮助。
蒂姆(Tim)

10
  1. git init

  2. git remote add origin https://gitlab.com/crew-chief-systems/bot

  3. git remote -v (用于检查当前存储库)

  4. git add -A(添加所有文件)

  5. git commit -m 'Added my project'

  6. git pull --rebase origin master

  7. git push origin master


在推送代码之前,您需要从存储库中提取代码
James Siva

您可以简单地像git pull --rebase origin master
James Siva

6

我遇到了同样的问题,并按照以下步骤进行了修复。

  1. git init
  2. git add .
  3. git commit -m 'Add your commit message'
  4. git remote add origin https://User_name@bitbucket.org/User_name/sample.git

    (URL https://User_name@bitbucket.org/User_name/sample.git上面 是指您的位存储桶项目url)

  5. git push -u origin master

暗示

使用以下命令检查您的git hub帐户是否链接到本地​​git:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

4

如果使用的是gerrit,则可能是由于提交中的Change-id不正确所致。尝试删除Change-Id,看看会发生什么。


4

在推送到Github存储库之前,请记住先进行更改。这可能会解决您的问题。


4

在推送之前不提交初始更改也会导致问题



3

我按照以下步骤操作,对我有用。

 rm -rf .git
 git init
 git add .
 git commit -m"first message"
 git remote add origin "LINK"
 git push -u origin master

2
git push origin {your_local_branch}:{your_remote_branch}

如果本地分支机构和远程分支机构共享相同的名称,那么可以使用来省略本地分支机构的名称git push {your_remote_branch}。否则会抛出此错误。


2

当您没有任何文件时,可能会发生这种情况。尝试创建一个文本文件,然后按照以下命令

git add .
git commit -m "first commit"
git push --set-upstream origin master

2

对我来说,问题是,我没有在提交之前添加文件。

git add .

git commit -m "your msg"


2

最佳使用rm -rf .git/hooks,然后尝试git push


有趣的是,在一个案例中,它显然没有关于原产地的提交(不需要重新设置基准),这对我很有帮助。
pevik

你为什么要扔掉所有的钩子?也许先备份?
MSpreij,

2

我在GitHub上创建了一个空仓库,并将代码保存在本地。按照以下顺序,我现在面临着同样的问题,

git init
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git add .
git push -u origin master

问题:我尝试在暂存文件之前提交。

因此,我们需要暂存文件然后提交。

这是正确的顺序。

git init
git add .
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git push -u origin master

由于我先执行了错误的顺序,所以我只执行以下命令

git add .
git commit -m 'Initial Commit'
git push -u origin master

1

不知道这是否适用,但是对我来说,解决方法是在git init之后在本地提交某些内容。然后我使用--set-upstream推送到远程...


1

创建一个新分支对我来说解决了:

git checkout -b <nameOfNewBranch>

正如预期的那样,由于以前的分支已完全包含在新分支中,因此无需合并。


1
我确实遇到了这个问题,当时我正在Feature22上并且正在执行操作git push origin feature22-fix,但是feature22-fix没有退出本地或远程操作,所以我不得不先在本地签出分支,然后再推送
Honey

1

如果您尝试使用现有的GitHub存储库初始化目录,则应确保提交更改。

尝试创建一个文件:

touch initial
git add initial
git commit -m "initial commit"
git push -u origin master

这将放置一个名为initial的文件,您以后可以删除它。

希望这个答案有帮助!祝好运!



1

就我而言,是我的husky包裹不允许这样做。

> husky - pre-push hook failed (add --no-verify to bypass)
> husky - to debug, use 'npm run prepush'
error: failed to push some refs to 'https://username@bitbucket.org/username/my-api.git'

要强行推动它,只需运行 git push origin master --no-verify

我跑去npm run prepush调试错误,这是原因:

npm ERR! code ELOCKVERIFY
npm ERR! Errors were found in your npm-shrinkwrap.json, run  npm install  to fix them.
npm ERR!     Invalid: lock file's loopback-utils@0.8.3 does not satisfy loopback-utils@^0.9.0

运行npm install并提交,问题已解决。


1

做这些

git rm --cached *
git add .
git commit -m"upload"
git push --set-upstream origin master

编码愉快!


1

试试这个git命令,

git push origin master –f
git push origin master --force

0

好吧,如果以上答案均无效,并且您ssh-add最近又弄乱了什么。尝试

ssh-add -D

0

对于sourcetree用户

首先进行初始提交,或确保您没有未提交的更改,然后在sourcetree的旁边有一个“ REMOTES”,右键单击它,然后单击“ Push to origin”。妳去


0

这发生在我身上,因为我有一个与分支相同的标签,并且我试图将分支推到远程。


0

就我而言,问题是(奇怪地)没有称为master的分支。我从Github取得了资料库。


0

我在推现有的错字“ evelop”分支,但我尚未结帐,而是想推一个名为“ envelope”的分支。因此,分支必须在本地工作副本中存在/签出,以便当然推送,因此不会出现错别字。

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.