在Github中推送新代码的问题


147

我在Github上创建了一个新的存储库,该存储库现在只有Readme.md文件。

我有一个新创建的RoR项目,我想推送到该存储库。以下是我在终端机中给出的执行此命令的命令以及我遇到的错误。

git remote add origin https://github.com/aniruddhabarapatre/learn-rails.git

之后,我输入了用户名和密码

git push -u origin master

错误-

To https://github.com/aniruddhabarapatre/learn-rails.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/aniruddhabarapatre/learn-rails.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 merge the remote changes (e.g.,
hint: 'git pull') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

这是我第一次将代码推送到Github存储库,但我迷失了错误。我搜索了这里提出的其他几个问题,但是第一次都没有问题。


Answers:


167

在GitHub上创建存储库时,创建了README.md,这是一个新提交

您的本地存储库尚不知道此提交。因此:

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

您可能需要遵循以下建议:

您可能需要先合并远程更改(例如“ git pull”),然后再重新推送。

那是:

git pull
# Fix any merge conflicts, if you have a `README.md` locally
git push -u origin master

3
我正在做的是先git pull origin master然后再推送。
Bagusflyer 2014年

12
在某些情况下,您可能会遇到fatal: refusing to merge unrelated histories这样的情况,git pull --allow-unrelated-histories origin master然后提交,然后按照上面的答案进行推送
TheLebDev

1
不为我工作。远程:推送被拒绝。远程:远程:refs / heads / master:...:预期的提交者名称xxx,但发现为yyy。我做了一个git config --global user.email yyy,它仍然无法识别。不能强迫任何东西!
Baruch Atta

284

如果这是你的第一推

只需更改

git push **-u** origin master

像这样改变它!

git push -f origin master

5
这删除了我首先放在github上的自述文件。现在看来我必须重新做一次。
杰克

3
您可能只是添加了一个警告,-f会强制执行该操作,并且可能会
干扰

这是一种不好的方法,它给我带来了一个问题,它删除了不是由我创建的自述文件,现在我必须致电维护者告诉他我很愚蠢,很抱歉再次创建自述文件。:(
Mohammad Elsayed

62

⚡️EASY:您只需要强行推动。因为您可能已经readme.md在Github上创建了文件,但尚未将其拉出。

git push -f origin master

这是GIF。

git push -f原始主机

⚠️ 当心:使用force可以改变历史上同一项目的其他人。基本上,如果您不希望每个人都删除文件,那就继续吧。特别是如果您是该项目的唯一开发者。


1
请注意,此方法会更改此存储库的其他用户已获取的历史记录。git push -f origin master这不是养成的好习惯。
Johnsyweb

1
此解决方案可以解决推送提交问题,但也可以删除所有过去的提交!
twenk11k

2
当心Github新手...如果您是通过GitHub创建的Readme.md,此命令将在您推送新更改时将其删除。
daCoda

这就是为什么人们在这里着陆的主要原因。-f标签会删除文件,应谨慎使用。
艾哈迈德·阿怀斯


8

假设您通过github提供的接口添加了Readme.md文件,则自述文件尚未位于您的本地文件夹中。因此,当您尝试推送到远程存储库时,会收到一个错误消息,因为本地存储库缺少自述文件-可以这么说。因此,如错误消息中所建议,请首先尝试“ git pull”。这将从远程存储库中提取自述文件,并将其与本地目录合并。之后,推送到远程存储库应该没有问题(发布的命令对我来说是有效的)。


6

这是在您最初尝试推送时发生的。因为在GitHub存储库中有readMe.md或本地存储库中没有的其他任何新内容。首先,您必须合并与github存储库无关的历史记录。

git pull origin master --allow-unrelated-histories

那么你可以使用这个从repo(readMe.md或任何)获取其他文件

git pull origin master

之后

git push -u origin master

现在您已将所有更改成功推送到Github存储库中。我不是git的专家,但是每次这些步骤对我来说都是有效的。


5

考虑一下您是否有一段时间没有提交更改,也许这样做对您有用。

git add files
git commit -m "Your Commit"
git push -u origin master

这对我有用,希望对您也有用。


3

如果在GUI中为Mac使用git,则可以选择“ Respository-> Pull”或“ comm + shift + p”来“ git pull”,然后再发布源。


3

通过以下git命令将数据从本地目录推送到远程git存储库时,会发生此错误: git push -u origin master

由于本地目录和git远程目录的文件冲突。

解决方案:

将所有文件提交到暂存后,请执行以下步骤。

  1. 从远程存储库中获取文件,因为它与本地工作目录冲突。

    • git pull <remoter-url> <branch-name>
  2. 再次提交更改。

    • git add -A
    • git commit -m ‘<comment>'
  3. 在两个目录都提交了合并文件之后,您可以使用

    • git push -u origin master

这样可以解决问题。谢谢。


1

我有一个类似的问题...我是这样解决的(我不是git专家,所以我不知道这是否是正确的解决方案,但对我有用):

git pull origin master --allow-unrelated-histories
git merge origin origin/master
git rm README.md
git commit -m 'removed readme.md'
git push origin master

0

我为这个错误苦苦挣扎了一个多小时!以下是帮助我解决该问题的原因。所有这一切,而我的工作目录是我在系统上克隆的存储库。

如果您要向现有存储库中添加文件** 1.我将添加到存储库中的所有内容都拉到了GitHub文件夹中:

git pull


输出是-一些自述文件file1 file2

  1. 我将新文件(要推送的文件)复制(拖放)到克隆的存储库(GitHub存储库)中。当您将要执行此回购操作时,您应该会看到旧文件和新文件。

例如。一些自述文件file1 file2 newfile1 newfile2

  1. git添加“ newfile1”“ newfile2”

  2. [可选] git status可以向您保证您要添加的文件是否正确上演或是否输出


在分支主服务器上您的分支是最新的'origin / master'。要提交的更改:(使用“ git reset HEAD ...”取消登台)

    new file:   newfile1
    new file:   newfile2

5.git commit -m“您要提供的任何描述” 6.git push

我的回购中可以看到我所有的新文件以及旧文件。




0

我在Azure Git上收到此错误,这解决了问题:

git fetch
git pull
git push --no-verify
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.