【Git】 git push 提示Not possible to fast-forward,无法提交也无法提交程序

目录

一、执行rebase操作

二、取消rebase操作


错误内容

复制代码
# git push  
To gitlab.aipark.com:aits/data-intergration.git
 ! [rejected]        zjk-prod-20230823 -> zjk-prod-20230823 (fetch first)
error: failed to push some refs to 'gitlab.aipark.com:aits/data-intergration.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.

出现这个错误提示的原因是,你和其他人修改了同一个文件,而且别人比你先提交。所提此时你在本地执行git pull和git push都无法完成。

一、执行rebase操作

1、此时你需要执行下面命令(--rebase顾名思义,重新校准基础版本,将本地的基础版本更新为git上的基础版本)【注意执行这个命令之前你需要将本地代码全部暂存】

复制代码
// master指的是当前修改的分支,请修改当前你所修改的分支名称(不然会出人命的)
git pull origin zjk-prod-20230823 --rebase

2、一般情况下执行完这个,如果没有冲突,后面就可以正常进行更新和提交操作了。

3、但是如果代码有冲突(别人和你修改了同一行代码,导致git不能自动合并),你会发现执行完之后本地版本变成了:5eec00e ±✚ >R,类似于这样的,说明rebase失败了,命令会提示哪些文件没有rebase成功,你需要手动将这些冲突合并。

4、等待所有冲突文件修改完成,暂存所有文件。

5、执行命令

复制代码
git rebase --continue

执行命令后可以正常提交代码到 zjk-prod-20230823分支。

6、如果依然存在冲突文件,重复步骤3、4、5,直到所有冲突修改完毕就可以了,最后就能正常提交更新了。

步骤1的rebase命令,一定要注意,网上给出的都是git pull origin master --rebase,指的是将本地基础版本修改为远程分支zjk-prod-20230823最新版本,如果你本地修改的是develop或者其他分支,就会导致代码错乱,此时需要恢复rebase操作,取消rebase操作,操作如下:

二、取消rebase操作

git pull origin master --rebase操作是重新校准本地基础版本,如果修改了一半,想要取消如何操作,或者是发现自己rebase错了分支如何撤销。

1、git pull origin master --rebase在冲突的情况下会出现(zjk-prod-20230823|REBASE 2/8)冲突的提示,说明有8个冲突文件需要修改。(如何解决这个问题,请移步这里)

2、取消rebase执行命令

复制代码
git rebase --abort

3、查看自己修改的rebase记录日志

复制代码
git reflog

b021abd (HEAD -> zjk-prod-20230823, origin/zjk-prod-20230823) HEAD@{0}: pull origin zjk-prod-20230823 --rebase (finish): returning to refs/heads/zjk-prod-20230823
b021abd (HEAD -> zjk-prod-20230823, origin/zjk-prod-20230823) HEAD@{1}: pull origin zjk-prod-20230823 --rebase (pick): 添加白名单
da0275b HEAD@{2}: pull origin zjk-prod-20230823 --rebase (start): checkout da0275b5cb8a090239768a7e0f3c29b136a485d2
49b6fa0 HEAD@{3}: commit: 添加白名单
93e7e5e HEAD@{4}: pull: Fast-forward
b74993c HEAD@{5}: checkout: moving from ts_kp_20230411 to zjk-prod-20230823
1556aa1 (ts_kp_20230411) HEAD@{6}: pull: Fast-forward
f6af3a8 HEAD@{7}: pull: Fast-forward
7a94afa HEAD@{8}: pull: Fast-forward
c904469 HEAD@{9}: pull: Fast-forward
2c810f3 HEAD@{10}: pull: Fast-forward
27437d7 HEAD@{11}: pull: Fast-forward
11e6536 HEAD@{12}: pull: Fast-forward
915a77e HEAD@{13}: pull: Fast-forward
af187d5 HEAD@{14}: commit: 修改pom依赖,移除不必要的依赖
2edffd1 HEAD@{15}: pull origin ts_kp_20230411: Fast-forward
245bf31 HEAD@{16}: pull origin ts_kp_20230411: Fast-forward
5f66ed7 (origin/zjk-pre-1.0.0, zjk-pre-1.0.0) HEAD@{17}: checkout: moving from zjk-pre-1.0.0 to ts_kp_20230411
5f66ed7 (origin/zjk-pre-1.0.0, zjk-pre-1.0.0) HEAD@{18}: clone: from gitlab.aipark.com:aits/data-intergration.git

4、观察日志中的记录,这里发现是在HEAD@{2}执行的rebase,然后执行恢复命令(注意是执行rebase命令的前一个步骤即:HEAD@{3})

复制代码
git reset --hard HEAD@{3}

5、如果想回滚到其他提交点,可以通过命令查看,如查看最近2次提交

复制代码
git log -n 2

# git log -n 2
 
commit da0275b5cb8a090239768a7e0f3c29b136a485d2
Merge: 93e7e5e af72411
Author: aaa <aaa@xxx.com>
Date:   Thu Sep 7 05:34:14 2023 +0000
 
    Merge branch 'ts_kp_20230411' into 'test'
 
    
    minio上传图片接口    
 
    See merge request aits/data-intergration!10
 
commit af72411206738273c79b585270063dca88ccb67c (origin/test)
Author: aaa <aaa@xxx.com>
Date:   Thu Sep 7 10:32:02 2023 +0800
 
    minio上传图片不用获取url

如果想回退到指定提交点,执行对应的commit id

复制代码
git reset --hard af72411206738273c79b585270063dca88ccb67c
相关推荐
b1ng5 小时前
新人程序员 Git 一站式指南
git·github
程序员的世界你不懂6 小时前
IDE 关联 Git 操作
ide·git
weixin_428498497 小时前
Git Submodule 介绍和使用指南
git
jingshaoqi_ccc19 小时前
GitKraken最后一个免费版本和下载地址
git·github·gitkraken·版本管理工具
乌云暮年19 小时前
Git简单命令
git·gitee·github·batch命令
用户1259265423201 天前
使用 Docker 搭建 Gitea 并实现 Git HTTP 自动登录
git
一只毛驴1 天前
谈谈对git stash的理解?
git
长风破浪会有时呀1 天前
Git 学习笔记
笔记·git·学习
中微子2 天前
Git Rebase 详解:概念、原理与实战示例
git
荔枝吻2 天前
【保姆级喂饭教程】Windows下安装Git Flow
windows·git·git flow