【git仓库管理】处理冲突时,显示git rebase 而不是git commit提示

如何解决代码冲突

今天在更新仓库的时候,发现没有拉取最新代码,被拒绝推送了。所以果断git pull
结果发现,给出的提示跟之前不太一样:
在这里插入图片描述
常规做法应该是git commit -m “message” 之后就算解决冲突了
别急,咱们git status 看一下状态
在这里插入图片描述
显示的又跟常规不一样,interactive rebase in progress 什么鬼;给出的参考步骤依然是跟git rebase这条命令相关
那么我们先按照常规思路来处理试试能否可行
在处理完冲突后,我执行了下面的命令

git add .
git commit -m "..."

此时执行git push后,被拒绝了:
在这里插入图片描述
按照提示,执行git push origin master,这回出现了报错信息
在这里插入图片描述
提示显示本地的分支落后于远程分支,不允许推送。
可是之前命令是已经拉取过最新代码了,也解决了冲突,为啥似乎没生效的样子
这个时候,我们再执行git pull origin master 看看效果:
在这里插入图片描述
结果残酷,依然被拒绝了。
那么咱们接下来就按照提示的命令执行一下
先git rebase --abort,结果可想而知,我们之前的pull下来的代码不见了
然后git pull 、解决冲突、git add .
之后执行 git rebase --continue 命令,发现输出不一样了

在这里插入图片描述
这个时候去查看日志 git log。会看到远端的提交已经合并到本地;
也就是说,这种解决冲突的办法跟merge不太一样
为什么?
这就跟代码分支合并的模式有关系;
git仓库的代码合并有两种模式

  1. git merge

  2. git rebase
    这两种方式的区别

  3. git merge 是合并,会将另一个分支合并到本分支,存在非同步的提交时,会将另一个分支的提交合并到当前分支中,并产生一次合并提交;确保团队提交记录的真实性

  4. git rebase 是变基,如果远端分支同本分支存在冲突,那么在git rebase之后,会将远端的分支更新到本地,而本地的所有commit 会基于拉取远端分支之后的最新commit提交;不会出现merge commit分支,会保持一个比较整洁的历史记录

  5. git merge 只需要处理一次冲突,git rebase 可能要处理多次,所以才有了git rebase --continue命令

  6. 如果是真实的项目场景,建议大家都用git merge

  7. 如果基于一个远端分支,有其他开发同事在协作,且也在用git rebase去进行合并,那么可能会导致提交记录无法混乱!!!大家都在rebase,可能你rebase了我的记录,我rebase了他的记录,他又rebase了你记录,想象一下这个关系

git rebase的流程

# 1.先拉取代码
git pull

# 2. 解决冲突并保存到暂存区
git add .
# 3. 继续处理下一个commit的冲突 
git rebase --continue
# 或者 终止变基
git rebase --abort

修改git pull 的模式

# 设置rebase模式
git config --global pull.rebase true
# 获取
git config --global --get pull.rebase
# 删除
git config --global --unset pull.rebase

综上,上面遇到的问题,是由于我出于好奇修改了pull的模式,导致,修改回merge就解决了

猜你喜欢

转载自blog.csdn.net/weixin_43500200/article/details/131849393