git:更新被拒绝,因为远程包含您在本地没有的工作


112

我正在与一些在BitBucket上使用git的开发人员一起工作。我们都在dev分支上工作,master直到发布为止。

其中一名开发人员提交了不正确的代码,这些代码不小心覆盖了我自己的代码,现在我正在尝试将正确的代码推回存储库。我已经读了几天这个错误了,由于我遇到以下错误,我不能再推送到仓库了:

 ! [rejected]        master -> dev (fetch first)
error: failed to push some refs to 'https://myusername@bitbucket.org/repo_user/repo_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我按照和的说明进行操作pull,但是随后出现合并冲突。输入有关合并冲突的消息后,我的本地代码现在是其他开发者意外上传的错误代码(如预期的那样pull)。因此,我用提交之前复制的备份替换了不正确的代码,当我再次尝试推送时,遇到了同样的错误。

这真的很令人沮丧,我真的很想帮助我的团队并做出贡献,但是我不能因为这个错误而努力。有谁知道如何解决这个问题?我非常感谢您的帮助。

如果可以帮助任何人,这些是我为了提交而运行的命令:

git pull remotename master:dev
git add --all
git commit -m "some message"
git pull remotename master:dev
git push remotename master:dev

我本以为,如果我保持此顺序,就不会收到合并冲突。我想我错了。再次感谢

更新:我应该补充一点,我已经在Google和stackoverflow上寻找了几个小时,并且遵循了不同的说明,但是我仍然不能pushdev分支机构。

Answers:


42

git pull <remote> master:dev将获取remote/master分支并将其合并到您的local/dev分支中。

git pull <remote> dev将获取remote/dev分支,并将其合并到当前分支中。

我认为您说的是冲突提交remote/dev,所以您可能打算提取并合并该分支。

在那种情况下,您实际上并没有将冲突合并到本地分支中,这有点怪异,因为您说在工作副本中看到了不正确的代码。您可能要检查中发生了什么remote/master


1
哇...我从来不知道。但这现在很有意义。master分支也不正确,因此您的回答清除了我的整个问题。我对git还是有点陌生​​。非常感谢您告诉我这两者之间的区别!
delos 2014年

6
对我来说最好的选择是git pull --rebase
derekmx271

150

在终端中使用此命令

git push -f原始主机


49
使用强制推送(-f)标志非常危险,它绝不应该成为您正常工作流程的一部分
Spaideri

5
投票失败,因为我在此答案中缺少警告。
Melebius

2
哦!这迫使存储库自行重写。
Azarsa '18年

3
我在github上遇到了相同的错误,并使用此命令修复了该错误,@ theeastcoastwest为什么会说这很危险?你是什​​么原因”
simon

3
@simon这很危险,因为它会忽略远程工作,并将您的更改强制到存储库中。因此,如果您不想弄乱团队的工作,请不要强行推动。
加斯滕

42

当我们尝试推送到远程存储库但在远程上创建了一个尚未拉出的新文件时,就发生了这种情况Readme。在那种情况下,如错误所示

git拒绝更新

因为我们没有在本地环境中进行远程更新。所以先从远程拉

git pull

它将更新您的本地存储库并添加一个新Readme文件。然后将更新的更改推送到远程

git push origin master

我当时在git pull origin develop本地开发部门工作,但是现在,git pull对我而言,这样做就可以了,我不知道为什么。
Alex

因为默认情况下,如果本地分支与远程分支同步并且您在该分支中签出,则无需指定分支就git pull足够了
Himanshu

11

当回购包含本地不存在的某些项目时,通常会发生这种情况。因此,为了推送更改,在这种情况下,我们需要集成远程更改然后推送。

因此,从远程创建拉动

git pull origin master

然后将更改推送到该遥控器

git push origin master


7

我修好了,我不确定自己做了什么。我尝试使用以下方法简单地推拉:

git pull <remote> dev 代替 git pull <remote> master:dev

希望这对某人遇到同样的问题有所帮助。


6

您需要输入:

$ git pull
$ git fetch 
$ git merge

如果使用git push origin master --force,将会有很大的问题。


5
为什么你需要使用git fetchgit merge重新运行后手动git pull其中包含他们
Melebius


4

好吧,实际上github比我们想象的要简单得多,即使我们在git信息库中明确插入了一些文件后,只要我们尝试推送,它都会发生,因此,为了解决该问题,只需尝试一下。

:git pull

然后..

:git push

注意:如果您在拉出存储库后不小心卡在了vim编辑器中,不用担心,只需关闭vim编辑器并尝试push :)


4

我已经完成以下步骤。终于一切正常。

脚步

1)git初始化

2)git status(用于检查状态)

3)git添加 (添加所有更改文件(。))

4)git commit -m "<pass your comment>"

5)git remote添加来源 "<pass your project clone url>"

6)git pull --allow-unrelated-histories "<pass your project clone url>"大师

7)git push -u "<pass your project clone url>"


2

我遇到此错误,这是因为服务器上有更新,但是SourceTree没有显示任何可用的更新(可能是因为上次检查时我处于脱机状态)。因此,我在源代码树中进行了刷新,现在它显示了要推送的2个项目,而不是1个项目。

因此,如果出现此错误,请确保按刷新拉动,然后重试。


1

git pull --rebase原始主机

git push origin master


git push -f原始主机

警告 git push -f origin master

  • 强制推送现有存储库,并删除以前的存储库,因此如果您不需要以前的版本,则可能会有所帮助


1

这就是我解决此问题的方法:

  1. git pull origin master
  2. git push origin master

当您的远程分支未更新时,通常会发生这种情况。然后,如果您收到类似“请输入提交消息”之类的错误,请参考此内容(对我来说,xiaohu Wang的回答是有效的:))


0

我首先有一个SSDT VS项目。我想将项目推进到Github。我希望该推送成为启动master分支的仓库的初始版本。Donal对git push -f origin master的建议是实现此目的的最简单方法。由于我不必担心重写任何东西,因此这似乎很有意义。


0

我有同样的问题。碰巧我在存储库中创建了.Readme文件,而没有先拉它。

您可能需要删除.Readme文件或将其拉出,然后再进行推送。


我不确定这个有5年历史的问题的答案是否会提供任何附加价值,再加上它不能为OP的特定问题提供解决方案。由于您是新的参与者,因此请查看有关如何回答问题的指南:stackoverflow.com/help/how-to-answer
Sotiris Koukios-Panopoulos

0

该错误可能是由于您提交的代码和存在于GitHub上的代码结构不同而引起的。您可以参考:如何处理“ 拒绝合并无关历史 ”错误:

$ git pull --allow-unrelated-histories
$ git push -f origin master

0

您可以使用

git pull --rebase <your_reponame> <your_branch>

如果您有一些尚未在本地存储库中注册的更改,这将有帮助。特别README.md

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.