在git push时无法推送到远端仓库,出现下面的信息

$ git push origin master
To https://github.com/USERNAME/REPOSITORY.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to ‘https://github.com/USERNAME/REPOSITORY.git’
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. ‘git pull’) before pushing again. See the
‘Note about fast-forwards’ section of ‘git push --help’ for details.

git官网上基于此提出的问题背景是
Sometimes, Git can’t make your change to a remote repository without losing commits. When this happens, your push is refused.If another person has pushed to the same branch as you, Git won’t be able to push your changes.
即远端仓库有了比你本地分支更新的commit,不允许你的此次修改直接推送到远端分支。

解决方案:

方案一:官网上给出的方法是
fix this by fetching and merging the changes made on the remote branch with the changes that you have made locally, or you can simply use git pull to perform both commands at once.
可以通过 fetching and merging 或者与其相同作用的 pull 解决,把远端已更新的项目拉回本地与你的本次修改合并,再push
注意pull前本次修改要提前commit到本地分支上;fetch merge pull的参数都要注意

$ git fetch origin
#Fetches updates made to an online repository
$ git merge origin YOUR_BRANCH_NAME
#Merges updates made online with your local work

$ git pull origin YOUR_BRANCH_NAME
#Grabs online updates and merges them with your local work

方案二:
事实上,如果是两个不同的项目,可能会不允许简单地pull

$ git pull origin master --allow-unrelated-histories
#这条命令允许了不同项目的合并
接下来就可以进行push
$ git push origin master

遇到问题背景:

第一次在远端建立分支后,提交过一次项目,本次修改是在导师的review后对个别方法做的小改进,希望仍然提交到第一次那个远端分支。
git add .
git commit --amend
错误操作 git pull <主机名> <分支名:分支名>
原本应该在这里push,用错命令pull了一遍 将远端分支更新拉下来与本地分支合并,实际上当时远端分支并没有任何内容更新,但此时再push却无法实现了,出现以上问题。

git pull和git push记录

将远程存储库中的更改合并到当前分支中。
$ git pull <远程主机名> <远程分支名>:<本地分支名>

如果要取回origin主机的next分支,与本地的master分支合并
$ git pull origin next:master
如果远程分支(next)要与当前分支合并,则冒号后面的部分可以省略
$ git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再执行git merge。
$ git fetch origin
$ git merge origin/next
有时Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如在git clone的时候,所有本地分支默认与远程主机的同名分支建立追踪关系,也就是说,本地的master分支自动追踪origin/master分支。如果当前分支与远程分支存在追踪关系,远程分支名也可以省略。
$ git pull origin
上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。
$ git pull
如果当前分支只有一个追踪分支,连远程主机名都可以省略。上面命令表示,当前分支自动与唯一一个追踪分支进行合并。

将本地分支的更新,推送到远程主机。它的格式与git pull命令相似。
$ git push <远程主机名> <本地分支名>:<远程分支名>

$ git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
$ git push origin
将当前分支推送到origin主机的对应分支。
$ git push
如果当前分支只有一个追踪分支,那么主机名都可以省略。

参考:
Dealing with non-fast-forward errors
git pull命令-git教程

2.错误原因分析 文件冲突,本地的代码和远程Repository中的文件个数不一致(即远程Repository中存在本地项目中不存在的文件)或本地得项目不是在远程Repository代码的基础上修改的 经过检查,本次错误原因:发现是在建立Repository ,添加了ReadMe.md文件,导致和本地得项目分支不一致。 3. 解决 方案 (1)每次本地修改代码前先从 git 仓库pull... 当使用 git push 命令更新 git 项目 ,出现如下问题: 可能是本地与远程出现冲突,尝试 git pull,出现refusing to merge unrelat ed histories的错误。 发现两个分支是两个不同的版本,具有不同的提交历史。通过查询https://blog.csdn.net/qq_39400546/article/details/100150320, 使用如下命令: $ git pull origin master --allow-unr root@instance-myaj5rsw:~/web_v2.2# git push origin web_v2.2 root@180.76.184.136's password: To root@ip:/refs/web. git ! [rej ect ed ] web_v2.2 -> web_v2.2 ( non - fast -forwar... ![rej ect ed ] master->master(fetch first) error:fail ed to push some refs to 'https:// git hub.com/xxx/xxx. git ' 按照错误的提示信息,操作 git fetch,然后再次 push 依然报错。。。 之后在网上找到了答案... 当新创建的 git ee仓库里已经有文件 ,如果使用idea上传项目到这个仓库就会报错: Push rej ect ed : Push to origin/master was rej ect ed ** 【 解决 方法】 第一种:新建一个新的 git ee仓库(该仓库必须是空仓库),再将代码推送到新建的空仓库中,则会弹出推送成功。 第二种:先将已经存在文件的远程仓库中的代码拉取下来,再将自己的代码与从仓库中拉取下来的代码合并,再重新推送到远程仓库中去。 将远程仓库的代码拉取下来将远程仓库的代码拉取下来 URL:要拉取的远程仓库 git remote add origin https:// git ee.com/imoonfish/dachuang. git git add . git commit -m '完成' git push origin master 开始提示需要先pull,再 push 于是我又执行了一遍命令,依然报错 git ini... 原因,我在云端仓库新建仓库 勾选了使用README.md初始化文档,导致本地与云端的文件不匹配。 解决 办法 ,先对云端的仓库进行pull操作,在进行 push 提交。 在以后新建仓库 ,尽量不要进行REMADE.md的初始化。