Git必知必会基础(13):远程冲突(conflicts)解决--rebase
本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/10854115.html
演示场景
虽然每次合并代码前会先把分支更新到最新,但是在你pull后到push前这段时间,可能其它小伙伴又push了,那么你的分支就不是最新的了
在push的时候就会失败,比如遇到这种提示信息:
To gitee.com:qzcsbj/pytest_apiautotest.git ! [rejected] master -> master (fetch first) error: failed to push some refs to 'gitee.com:qzcsbj/pytest_apiautotest.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.
本篇我们演示这种场景,并用rebase解决冲突。
git pull --rebase = git fetch + git rebase
数据准备
重新克隆
日志
远程分支qzcsbj.txt内容
commit id
其他人提交
模拟其他人对master做了提交:直接gitee上修改文件并提交
新的commit id
本地提交
本地分支修改qzcsbj.txt内容为:
添加到暂存区
提交到本地仓库
推送到远程仓库,报错
To gitee.com:qzcsbj/pytest_apiautotest.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'gitee.com:qzcsbj/pytest_apiautotest.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.
大概意思是:远程仓库别人推送的内容,我们本地没有
日志
解决冲突
拉取最新master分支,并rebase到该分支
git pull --rebase origin master
下面做了自动合并;当前在远程分支版本516f1a4
日志:git log中少了5344be2
git status
查看文件内容
内容修改为:
状态和日志
添加到暂存区
日志
git rebase --continue,提示不能提交暂存的修改
error: Terminal is dumb, but EDITOR unset,意思是终端无响应,未设置EDITOR
方法一:换用git bash
说明,方法一的截图和前面非同一个demo,这里仅仅为了演示;续接上面数据,我们会用方法二继续演示
执行git rebase --continue后,直接进入命令模式,显示类似如下的内容,也就是说会让修改提交信息
输入i进入编辑模式,修改log信息
修改完成后,esc退出编辑模式,:wq保存退出,然后会显示如下信息,说明生成了一个新的commit id(7e80ee6)、变基成功并更新refs/heads/master
此时直接push就可以成功
下面是日志
方法二:执行commit
如果终端未设置EDITOR,我们也可以自己commit
commit,颜色变成白色了,生成了一个新的commit id
状态和日志:当前 master分支在516f1a4,HEAD在30aa53a
git rebase --continue,master rebase到HEAD
状态、日志:git log中,少了5344be2
git push
push成功后,远程分支内容
commit id
查看分支合并图
git log --graph,是一条直线
git log --graph --oneline
__EOF__
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!