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

我所在的团队中有几个开发人员在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

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

< p >更新: 我应该补充说,我已经在谷歌和StackOverflow上寻找了几个小时,并遵循了不同的指示,但我仍然不能pushdev分支
520173 次浏览
我修复了它,我不太确定我做了什么。 我尝试简单地推和拉使用:

< p > git pull <remote> dev 而不是 git pull <remote> master:dev < / p >

希望这能帮助那些有同样问题的人。

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

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

我想你说过冲突的提交是在remote/dev上,所以这是你可能打算获取和合并的分支。

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

我有这个错误,这是因为服务器上有更新,但SourceTree没有显示任何可用的更新(可能是因为我离线时,它最后一次检查)。所以我在源树中做了刷新,现在它显示了2个项目,而不是1个项目。

所以,如果你得到这个错误,一定要按< em > < / em >刷新< em > < / em >拉,然后再试一次。

你需要输入:

$ git pull
$ git fetch
$ git merge

如果你使用git push origin master --force,你会有一个大问题。

您可以使用“force push”覆盖git所做的任何检查。在终端使用此命令

Git push -f origin master

但是,您可能会忽略远程中的现有工作—您实际上是在重写远程的历史记录,使其与本地副本完全相同。

它发生在我们试图推送到远程存储库,但已经在远程上创建了一个尚未提取的新文件时,例如Readme。在这种情况下,正如错误所示

Git拒绝更新

,因为我们没有在本地环境中采取更新的远程。 所以首先从remote取pull

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

git push origin master

好吧,实际上github比我们想象的要简单得多,无论何时我们尝试,甚至在我们显式地在我们的git存储库中插入一些文件之后,它都会发生,为了修复这个问题,只需尝试..

: git拉

然后. .

: git push

注意:如果你不小心卡在vim编辑器拉你的存储库比不要担心,只是关闭vim编辑器,并尝试推:)

推力

Git push -f origin master

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

所以从远程创建一个拉

git pull origin master

然后把更改推到那个遥控器上

git push origin master

你可以试试这个:git pull origin master --rebase

我已经完成了以下步骤。终于可以正常工作了。

步骤

1) git init

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

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

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

我也有同样的问题。碰巧我已经在存储库上创建了. readme文件,而没有先拉它。

您可能希望删除. readme文件或在推送之前将其拉出。

Git pull -rebase origin master

Git push origin master


Git push -f origin master

警告 git push -f origin master

  • 强制推动现有的存储库,也删除以前的存储库,所以如果你不需要以前的版本,这可能是有帮助的

错误可能是因为你提交的代码结构和GitHub上的代码结构不同。你可以参考:如何处理"拒绝合并不相关的历史"错误:

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

这对我来说是最好的选择,而且很简单

git pull—rebase < /代码> < / p >

然后

git push

祝你好运

你可以使用

git pull --rebase <your_reponame> <your_branch>

这将有助于如果您有一些更改尚未注册在您的本地回购。尤其是README.md

我是这样解决这个问题的:

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

这通常发生在您的远程分支没有更新时。 在此之后,如果你得到一个像“请输入一个提交消息”这样的错误; 参考(对我来说,xiaohu Wang回答有效:))

我也有同样的问题。确保你在正确的heroku帐户。当我试图将更改推到错误的heroku帐户时,它出现了

如果你已经用ReadMe文件初始化了一个新的GitHub repo,并且还收到了一个致命的错误,像这样:

致命的:拒绝合并不相关的历史

然后你可能想试试下面的命令:

git pull origin master --allow-unrelated-histories

现在你可以尝试将你的项目推到你的新存储库:

git push origin [branch]

注意:如果你已经在Github中初始化了存储库,并且在本地提交,那么你需要使用上面建议的命令,第一个命令"git pull origin…"否则,您可以简单地键入以下命令:

git pull origin [branch]

希望对大家有帮助。

1. __abc0

2.根据您的需求接受更改,比如保留传入的更改或保留现有的更改。

< p > 3。git添加否则给出git添加。 4. __abc0 < / p >

5. __abc0

这对我很有效。如果对你不起作用请告诉我。

您可以简单而安全地恢复您的同事所做的更改。使用git revert命令。

git revert commit-hash

使用下面的命令可以找到散列。

git log

它不是理想的恢复提交,事实上,它是一个非常罕见的情况下这样做。经常发生的情况是,开发人员会并发地处理类似的文件,并进行不同的更改。构建Git是为了减少维护健康代码库所需的工作量。

在git之上,像Github, Atlassian, GitLab和其他可能的服务提供了方便的接口和功能,以减少更多类似的问题。 例如,防止直接推送到共享分支,并使用子分支将其替换为拉请求

如果你的团队缺乏一点组织性。我给你的建议是加快工作速度,在其他人之前推动突破性的变化。(jk)

我的独白已经说够了,当这个问题发生时,我喜欢使用一些方法。

首先,也是最明显的一点,在推动更改之前尝试解决冲突。现在的ide有很好的冲突界面,这是一个关于vs-code的例子。

enter image description here

有两个明显的按钮“接受当前,传入,两者”;它将允许您选择要保留、修改或删除的代码段。如果您愿意,还可以手动编辑代码!当然没有IDE的同意。

当您的工作正在进行,并且您确实需要您的团队成员所做的更改时,这是非常棒的。或者当你完成工作,只想在第三次加班后上床睡觉前写一份公关报告。

你可以通过cmd做同样的事情,但你可能会在进程结束时结束。

如果你正在开发一个大型功能,并且已经做了很多更改,但你想保持文件未提交,因为有时这样做很方便。藏东西是你的朋友。

git stash > Will temporary store your changes locally until you do a
git stash pop >  which will retrieve and apply the changes for you.

在隐藏操作之间拉一个分支不会触发冲突,假设你的分支接近共享的分支。否则,你就回来了 在第一步。

我的第三个也是最后一个小秘密是diff文件。

git checkout -b branch_a
git diff dev..branch_a > changes.diff
git apply changes.diff

它所做的基本上是比较两个分支之间的差异,并创建一个名为changes的文件。Diff将显示您的同事所做的所有更改,并将帮助您决定保留或删除哪些内容

顺便说一句!你可以用merge -abort来取消m