【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 
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 
Date:   Thu Sep 7 10:32:02 2023 +0800
 
    minio上传图片不用获取url

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

git reset --hard af72411206738273c79b585270063dca88ccb67c

你可能感兴趣的:(持续集成与发布(CI/CD),git)