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

我创建了一个新的repo,克隆它,将文件添加到目录中,使用add -A添加它们,提交更改,当我尝试使用git push <repo name> master推送时,我得到:

提示:更新被拒绝,因为远程包含您在本地没有的工作。这通常是由另一个存储库推送到相同的引用引起的。您可能希望首先合并远程更改(例如, 提示:'git pull'),然后再次推

这似乎没有意义,因为它是一个新的回购,只包含一个自述文件。

379095 次浏览

如果你用README和/或LICENSE文件初始化一个新的github repo,就会发生这种情况

git remote add origin [//your github url]


//pull those changes


git pull origin master


// or optionally, 'git pull origin master --allow-unrelated-histories' if you have initialized repo in github and also committed locally


//now, push your work to your new repo


git push origin master

现在你可以将你的存储库推送到github了。基本上,您必须将这些新初始化的文件与您的工作合并。git pull为你获取和合并。如果适合你,你也可以获取和合并。

错误可能是因为你提交的代码结构和GitHub上的代码结构不同。它制造的冲突可以通过

git pull

合并冲突解决:

git push

如果你确认你的新代码是好的,你可以使用:

git push -f origin master

其中-f代表“力”。

如果这是你的第一次尝试

只要把

git push <repo name> master

像这样改变它!

git push -f <repo name> master

提供的答案对我不起作用。

我在GitHub上有一个空的回购,只有许可证文件和一个本地提交。奏效的方法是:

$ git fetch
$ git merge --allow-unrelated-histories
Merge made by the 'recursive' strategy.
LICENSE | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 LICENSE

同样,在merge之前,你可能想:

$ git branch --set-upstream-to origin/master
Branch 'master' set up to track remote branch 'master' from 'origin'.

你可以参考:如何处理&;__abc0 &;错误:

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

我是这样做的:

拉主:

git pull origin master

这将同步你的本地回购与Github回购。添加新文件,然后:

git add .

提交更改:

git commit -m "adding new file  Xyz"

最后,push origin master:

git push origin master

刷新你的Github回购,你会看到新添加的文件。

如果您使用的是Visual S2019,请如下所示创建一个新的本地分支,然后将更改推到repo。

VS2019 local branch

这个问题是因为本地并不是最新的主分支,这就是为什么我们应该在将代码推到git之前将其拉出

git add .
git commit -m 'Comments to be added'
git pull origin master
git push origin master

在最后一次提交后,我在repo中直接手动编辑了几个文件,结果得到了相同的错误。

使用git push -f origin master来强制更新而不是git push origin master

只有当你确切地知道在回购中更改了什么,并且你100%确信你想让本地提交替换所有内容时,才建议这样做。我的项目是一个业余爱好,没有其他人在做,除了手动更改之外,没有从任何其他设备上进行其他提交。

简单地运行这些命令:

< p > git拉 Git添加。 git commit -m 'Your comment' git push < / p >

如果你有一个浅克隆,这种情况也会发生。在这种情况下,“远程包含本地没有的工作”在技术上总是正确的,因为您只有有限的提交集,而远程可能拥有完整的历史记录。如果本地回购只有一个新的提交——这可能发生在CI系统上——那么这就会导致问题,因为没有共同的提交,git将无法推送。

一种解决方案是执行一个不那么浅的克隆。

对于Github Actions, 你可以设置fetch-depth: 0拉出“所有标签和分支的所有历史”。对于大型回购,你可能想要调优它,例如,在浅复制之后运行git fetch --shallow-since=<date>,但对于小型回购应该没问题。

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0