一、问题描述
在Git Bash窗口中输入git push origin main
,出现报错如下:
Lenovo@(设备名称) MINGW64 (文件路径)(main)
$ git push origin main
To https://github.com(Github仓库名称).git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/yangdanyang2005/20240507_Graph.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. If you want to integrate the remote changes,
hint: use 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
二、问题解决
这是在推送代码到GitHub远程仓库时,经常遇到的一个问题:远程仓库中的内容与您本地仓库的内容发生了冲突,导致推送被拒绝。
以下是解决这个问题的步骤:
1.同步远程仓库的最新更改
在推送之前,需要先从远程仓库获取最新的更改。
可以使用以下命令:
git pull origin main
这条命令会尝试合并远程仓库main分支的最新更改到你的本地main分支。
2.解决合并冲突
如果在执行git pull时出现了合并冲突,比如出现了这样的报错:
Lenovo@(设备名称) MINGW64 (文件路径) (main)
$ git pull origin main
From https://github.com/(仓库名称)
branch main -> FETCH_HEAD
fatal: refusing to merge unrelated histories
这通常意味着你正在尝试合并两个没有任何共同祖先的分支。这种情况可能发生在以下几种情况:
- 克隆了一个新的仓库到本地,而不是从远程仓库更新。
- 在本地创建了一个新的仓库,然后尝试将其推送到一个已经存在的远程仓库,但这两个仓库的初始提交不是同一个。
要解决这个问题,可以使用--allow-unrelated-histories
选项来强制 Git 合并这两个分支。
以下是解决步骤:
- 执行以下命令来合并远程仓库的历史,即使它们是不相关的:
git pull origin main --allow-unrelated-histories
- 如果命令执行成功,Git 会合并两个仓库的历史,但可能会产生合并冲突:
Merge branch 'main' of https://github.com/(仓库名)
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
#the commit.
~
~
~
-- INSERT -- recording
- 解决方法:
不写原因,直接3,4步骤;写原因则1,2,3,4步骤:
- 按键盘字母 i 进入insert模式
- 修改最上面那行黄色合并信息,可以不修改
- 按键盘左上角"Esc"
- 输入":wq",注意是冒号+wq,按回车键即可
Merge branch 'main' of https://github.com/(仓库名)
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
#the commit.
~
~
~
:wq
(此处参考链接:https://blog.csdn.net/qq_45677671/article/details/118905658)
三、解决完所有冲突后,提交更改
git add <冲突文件路径> #通常是 git add .
git commit -m "合并远程仓库历史并解决冲突"
四、再次尝试推送更改到远程仓库
git push origin main
请注意:使用 --allow-unrelated-histories 选项时要小心,因为它会合并两个完全不同的项目历史,这可能会导致一些意想不到的后果。
确保这是你确实想要的结果,特别是在你公开的比较重要的项目中。如果不确定,可以创建一个新的分支来进行合并,这样就不会影响主分支。