Git拒绝了非快进式推送。

17

我对git还比较新,过去两个月一直在一个小项目上工作,并且一直没有问题地向bitbucket推送更新。几天前,由于我需要重新安装Linux操作系统,我将项目文件夹压缩了起来。现在,我已经重新安装好了Linux操作系统,解压了这个文件夹。

所以,现在我回到了我的项目文件夹,继续开心地工作,最后执行了以下操作:

git add -A && git commit -m "modified code" && git push origin master

这通常是我的做法。

然后我得到:

To https://johnsproject@bitbucket.org/johnsproject/proj.git
! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://johnsproject@bitbucket.org/johnsproject/proj.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我查看了几个 Stack Overflow 上的问题,他们建议使用一个 force 标志 -f,但我不确定我是否应该这样做。

p.s:我在主分支上 - 这是我的仓库中唯一的分支。

如果有人能指导我正确方向,我会非常感激。

谢谢。


1
合并远程更改(例如'git pull') 提示:再次推送之前,请尝试拉取。 - Bob
我尝试了这个,但我得到了以下信息:* 分支 master -> FETCH_HEAD 正在更新 74f5f2e..06e5112 错误:您对以下文件的本地更改将被合并覆盖: 请先提交您的更改或将它们藏起来,再进行合并。 - JohnJ
好的,然后提交您的更改并再次运行 git pull - Bob
8个回答

24

在您可以推送之前,中央仓库中有必须拉取的更改。

git add -A
git commit -m "my local changes" 
git pull

解决任何冲突。然后执行。

git push

或者,如果你本地没有有价值的修改,你可以创建一个新的克隆库,并从那里开始工作:

git clone https://johnsproject@bitbucket.org/johnsproject/proj.git new_repo_dir

当我执行git pull时,似乎会得到以下信息:* branch master -> FETCH_HEAD Updating 74f5f2e..06e5112 error: Your local changes to the following files would be overwritten by merge: Please, commit your changes or stash them before you can merge. - JohnJ
1
@JohnJ 好的,遵循这个建议。首先提交您的本地修改。然后执行 git pull 并解决任何冲突。 - Klas Mellbourn

11

试着去做

git pull origin master
git add -A
git commit -m "modified code"
git push origin master

你的本地代码库可能已经和远程代码库不同步。


尝试使用egit做这件事情是个噩梦,但本质上来说,Eclipse的git同步屏幕一直显示着旧的、过时的合并冲突。我不得不停止并重新启动,突然间我的问题就解决了。供参考。 - Adam

9

我曾经遇到过同样的问题。我通过使用 git push -f 命令来强制更新解决了这个问题。


1
关于这个解决方案,如果你有任何本地未拉取的新文件,此过程将删除它们。 - zinon
1
如果您不确定正在推送什么,这不是一个好的解决方案。 - skyrocker

4

对我来说很有效 git push --set-upstream origin master -f


2
我曾经遇到过完全相同的问题。尝试了很多方法都没有用,直到我尝试了这个命令:
git pull --rebase origin master
之后,运行推送命令:
git push -u origin master
对我来说解决了问题!

虽然这个方法可行,但对于新手用户来说,了解执行这些命令时发生了什么可能会很有用。您可以通过解释问题是什么(请参见Klas Mellbourn的答案),git pull如何解决它(请参见git pull文档)以及为什么选择添加额外的--rebase标志来改进您的回答。 - Boyan Hristov

0

在我的情况下,是从Git存储库中获取的新文件未被添加,这就是解决方案: 1. git status(仅用于检查) 2. git add . 3. git push -u master origin


0
你可以尝试使用git pull命令,在工作室中进行git commit操作,然后使用git push origin分支名称。

0
有时候,你的分支也可能会出现问题。比如说,你正在另一个名为“X”的分支上工作,而在这个分支上还有两个或更多人在工作。如果你从主分支拉取了代码,然后推送到“X”分支,就会出现错误。你需要再次从“X”分支拉取代码,并将其推送到“X”分支。

目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接