更新被拒绝,因为远程包含您在本地没有的工作
Posted
技术标签:
【中文标题】更新被拒绝,因为远程包含您在本地没有的工作【英文标题】:Updates were rejected because the remote contains work that you do not have locally 【发布时间】:2014-08-12 23:20:59 【问题描述】:我正在与几个在 BitBucket 上使用 git 的开发人员组成一个团队。我们都在开发dev
分支,在发布之前不会推送到master
。
其中一位开发人员提交了错误的代码,不小心覆盖了我自己的代码,现在我正试图将正确的代码推回 repo。我已经阅读这个错误几天了,我无法再推送到回购,因为我收到以下错误:
! [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 和 *** 上找了几个小时,并按照不同的说明进行操作,但我仍然无法将 push
转到 dev
分支。
【问题讨论】:
当您发出git push
时,当您当前在另一个 repo 的目录中时,会显示相同的错误消息 .... git 消息应该更新以反映这一点,特别是因为它的语气听起来很权威否则说服
【参考方案1】:
您可以使用“强制推送”覆盖 git 所做的任何检查。在终端中使用此命令
git push -f origin master
但是,您可能会忽略远程中的现有工作 - 您实际上是在重写远程的历史,使其与您的本地副本完全相同。
【讨论】:
使用强制推送 (-f) 标志是非常危险的,它不应该成为您日常工作流程的一部分 投了反对票,因为我在这个答案中遗漏了一些警告。 哦!这会强制存储库自行重写。 @simon 这很危险,因为它忽略了远程工作,并强制您对 repo 进行更改。因此,如果您不想破坏团队的工作,请不要强行推动。 如果您这样做并感到内疚,但会再次这样做,请举手。【参考方案2】:当我们尝试推送到远程存储库但在远程创建了一个尚未拉取的新文件时会发生这种情况,比如说Readme
。在这种情况下,正如错误所说
git 拒绝更新
因为我们没有在本地环境中更新远程。 所以先从远程拉取
git pull
它将更新您的本地存储库并添加一个新的Readme
文件。
然后将更新的更改推送到远程
git push origin master
【讨论】:
我在本地开发分支中执行git pull origin develop
,但现在,只是执行 git pull
对我来说很好,我不知道为什么。
因为默认情况下,如果您的本地分支与远程分支同步并且您在该分支中签出,则无需指定分支,只需 git pull
就足够了
git pull
帮助【参考方案3】:
git pull <remote> master:dev
将获取 remote/master
分支并将其合并到您的 local/dev
分支中。
git pull <remote> dev
将获取remote/dev
分支,并将其合并到您当前的分支中。
我想你说有冲突的提交是在remote/dev
,所以这就是你可能打算获取和合并的分支。
在这种情况下,您实际上并没有将冲突合并到您的本地分支中,这有点奇怪,因为您说您在工作副本中看到了不正确的代码。您可能想查看remote/master
中发生的情况。
【讨论】:
哇...我从来不知道。但现在它很有意义。主分支也不正确,所以你的回答清除了我的整个问题。我对 git 还是有点陌生。非常感谢您告诉我这两者之间的区别! 对我来说最好的选择是git pull --rebase
。
git pull <remote> master:dev
dev
是什么?【参考方案4】:
当 repo 包含一些本地不存在的项目时,通常会发生这种情况。所以为了推送我们的更改,在这种情况下,我们需要整合远程更改然后推送。
所以从远程创建一个拉动
git pull origin master
然后将更改推送到该远程
git push origin master
【讨论】:
错误:致命:拒绝合并无关的历史记录【参考方案5】:强制推动
git push -f origin master
【讨论】:
这应该带有警告。 即使这肯定会奏效,您介意解释一下吗?这样做会不会有什么危险?如果是,请进一步解释,例如:“伙计们,请确保您将使用这个来释放提交”【参考方案6】:我修好了,我不确定我做了什么。 我尝试简单地推拉使用:
git pull <remote> dev
代替
git pull <remote> master:dev
希望这对遇到同样问题的人有所帮助。
【讨论】:
【参考方案7】:这就是我解决这个问题的方法:
git pull origin master
git push origin master
这通常发生在您的远程分支未更新时。 在此之后,如果您收到“请输入提交信息”之类的错误 参考this(对我来说小虎王回答有效:))
【讨论】:
【参考方案8】:你可以试试这个:git pull origin master --rebase
【讨论】:
嗨,爱德华多!这对我有用。但是你能解释一下它为什么有效吗?这个命令具体做什么?【参考方案9】:您需要输入:
$ git pull
$ git fetch
$ git merge
如果你使用git push origin master --force
,你会遇到很大的问题。
【讨论】:
为什么在运行git pull
which contains them 之后需要再次手动使用git fetch
和git merge
?【参考方案10】:
其实 github 比我们想象的要简单得多,而且当我们尝试 push 时,即使我们在 git 存储库中明确插入了一些文件,也绝对会发生这种情况,因此,为了解决问题,只需尝试一下即可。 .
: git 拉
然后..
: git 推送
注意:如果您在拉取存储库后不小心卡在 vim 编辑器中,请不要担心,只需关闭 vim 编辑器并尝试 push :)
【讨论】:
【参考方案11】:我已经完成了以下步骤。终于可以正常使用了。
步骤
1) git 初始化
2) git status(用于检查状态)
3) 混帐添加。 (添加所有更改文件(.))
4) git commit -m "<pass your comment>"
5) git 远程添加源"<pass your project clone url>"
6) git pull --allow-unrelated-histories "<pass your project clone url>"
master
7) git push -u "<pass your project clone url>"
master
【讨论】:
【参考方案12】:git pull --rebase origin master
git push origin master
git push -f origin master
警告 git push -f origin master
强制推送现有存储库并删除以前的存储库,因此如果您不需要以前的版本,这可能会有所帮助【讨论】:
【参考方案13】:我遇到此错误,这是因为服务器上有更新,但 SourceTree 未显示任何可用更新(可能是因为上次检查时我处于脱机状态)。所以我在源代码树中进行了刷新,现在它显示了 2 个要推送的项目而不是 1 个项目。
因此,如果您遇到此错误,请务必按 refresh 或 pull,然后重试。
【讨论】:
【参考方案14】:你可以使用
git pull --rebase <your_reponame> <your_branch>
这将有助于您有一些尚未在本地存储库中注册的更改。特别是README.md
【讨论】:
【参考方案15】:我遇到了同样的问题。碰巧我在存储库上创建了 .Readme 文件,而没有先拉它。
您可能希望删除 .Readme 文件或在推送之前将其拉出。
【讨论】:
我不确定这个 5 岁问题的答案是否提供了任何额外的价值,而且它没有为 OP 的特定问题提供解决方案。由于您是新贡献者,请查看如何回答问题的指南:***.com/help/how-to-answer 请进一步解释为什么添加自述文件会导致给定的错误消息【参考方案16】:该错误可能是因为您提交的代码结构与 GitHub 上的代码结构不同。您可以参考:如何处理“refusing to merge unrelated histories”错误:
$ git pull --allow-unrelated-histories
$ git push -f origin master
【讨论】:
即使这肯定行得通,您介意解释一下吗?这样做会不会有什么危险?如果是,请进一步解释,例如:“伙计们,请确保您将使用这个来释放提交”【参考方案17】:对我来说是最好的选择,它既有效又简单
git pull --rebase
然后
git push
祝你好运
【讨论】:
【参考方案18】:我遇到了同样的问题。确保您使用的是正确的 heroku 帐户。当我尝试将更改推送到错误的 heroku 帐户时出现
【讨论】:
以上是关于更新被拒绝,因为远程包含您在本地没有的工作的主要内容,如果未能解决你的问题,请参考以下文章
repo sync更新git仓库报错:已拒绝,会破坏现有的标签
更新被拒绝,因为您当前分支的尖端在提示后面:它的远程对应部分。集成远程更改(例如 [重复]