我可以不吃啊 发表于 2024-8-30 05:34:48

Git必知必会底子(10):当地辩论(conflicts)解决--rebase

本系列汇总,请查察这里:https://www.cnblogs.com/uncleyong/p/10854115.html
关于rebase

rebase用来变基,就是重新定义(re)出发点(base)的作用,即重新定义分支的版本。
在执行变基的过程中,三个常用下令:
   git rebase --skip 它表示丢弃当前补丁的重放,即忽略掉当前补丁

git rebase --abort 它表示终止正在进行的变基操作,并且恢复到最初始的状态

git rebase --continue 它表示继续补丁的重放,一般在解决冲突后执行该命令
    演示场景

在合并分支过程中,可能会遇到辩论,本篇演示用rebase解决当地辩论。
基于master主分支,创建两个开发分支dev_a和dev_b,分别做修改:
dev_a第一次修改并提交到当地仓库,然后推送到远程仓库
dev_b第一次修改并提交到当地仓库,然后推送到远程仓库
dev_a第二次修改并提交到当地仓库,然后推送到远程仓库
dev_b第二次修改并提交到当地仓库,然后推送到远程仓库
先合并dev_a:切换到dev_a,rebase master分支,没有辩论,然后切换到master,举行merge
然后合并dev_b:切换到dev_b,rebase master分支,产生辩论,解决辩论,然后切换到master,举行merge,最后push到远程master分支
准备数据 

远程数据
https://i-blog.csdnimg.cn/blog_migrate/364ec86cf489bdaa18187acdd20ff57b.png
远程commit id
https://i-blog.csdnimg.cn/blog_migrate/cf508bbad95e2730a1a212998cdd259b.png
克隆到当地
https://i-blog.csdnimg.cn/blog_migrate/59c051fcab05459faed3a7ddcb3912e0.png
文件内容
https://i-blog.csdnimg.cn/blog_migrate/f88f114c3bd2d87d3fc6ecbdfa13eb78.png
创建dev_a分支
https://i-blog.csdnimg.cn/blog_migrate/9348994be048a334ac3628886bf8afcf.png
修改qzcsbj.txt内容,然后提交到当地仓库
https://i-blog.csdnimg.cn/blog_migrate/65b6b24b88fbed50974c911bcf2a3475.png
切换到master,创建dev_b分支
https://i-blog.csdnimg.cn/blog_migrate/983372d1c447600af54af9510d2ae8af.png
修改qzcsbj.txt内容,然后提交到当地仓库
https://i-blog.csdnimg.cn/blog_migrate/1fb76015630c0d33e39194554db579a6.png
再次切换到dev_1做一次提交,然后推送到远程仓库
https://i-blog.csdnimg.cn/blog_migrate/5f66b29d207619292cf1bfb7366c8939.png
再次切换到dev_2做一次提交,然后推送到远程仓库
https://i-blog.csdnimg.cn/blog_migrate/5634703e73bbabce5a67cc9b8ee9ed4a.png
远程分支内容
https://i-blog.csdnimg.cn/blog_migrate/9f7118ec0d0177e135272578a00a2428.png
https://i-blog.csdnimg.cn/blog_migrate/8fb4fc60f9841143c1c42a844a17e7bd.png
https://i-blog.csdnimg.cn/blog_migrate/200f67f505522c8cf45e38919c17924a.png
合并分支并解决辩论

切换到master,拉取最新master
https://i-blog.csdnimg.cn/blog_migrate/318be8056b2dc4c91b4dda8e22a0cdb4.png
先合并dev_a,下面没有辩论,变基乐成并更新refs/heads/master
https://i-blog.csdnimg.cn/blog_migrate/a87309be95fe5344fad5215a430bfe1b.png
https://i-blog.csdnimg.cn/blog_migrate/186709568d96c62c35c99ab524d6b10d.png
切换到master举行merge
https://i-blog.csdnimg.cn/blog_migrate/d0e5712b306a9ef9504c81b6c311d6b0.png
push到远程
https://i-blog.csdnimg.cn/blog_migrate/0ee44716967e615f15393600af815fc7.png
然后合并dev_b分支,产生辩论,辩论文件是qzcsbj.txt
https://i-blog.csdnimg.cn/blog_migrate/a7f9ad60d850acd3c29c412cf6dcbdc4.png
也可以这样查察辩论的文件:git diff --name-only --diff-filter=U
https://i-blog.csdnimg.cn/blog_migrate/b22acfa6abccd20287475145a4b9fa4d.png
查察分支差异:git diff master dev_b
https://i-blog.csdnimg.cn/blog_migrate/bc5e6705b3bc0ae444c500507c183585.png
辩论文件内容:
https://i-blog.csdnimg.cn/blog_migrate/dc22ac1fc919ae333c64b62b862118b5.png
HEAD(ef2d957)体现dev_b第一次提交
https://i-blog.csdnimg.cn/blog_migrate/5e3c880533e207abc8cb70e947a53b8f.png
修改辩论文件
https://i-blog.csdnimg.cn/blog_migrate/b111f72bbf619028197e3c69372e8d3e.png
add
https://i-blog.csdnimg.cn/blog_migrate/b3f7d719da6b79b8adddadc8e7fee48a.png
继续rebase
https://i-blog.csdnimg.cn/blog_migrate/6096309fca1d1414dd0ec0cb98cefc7a.png
https://i-blog.csdnimg.cn/blog_migrate/9f511acc76463cca73f89c33b0b82bb0.png
第一行改为:
https://i-blog.csdnimg.cn/blog_migrate/679b07ea8740ddf5f436a53f5e40dff2.png
保存退出后的结果:天生的新提交id是bd16a7c
https://i-blog.csdnimg.cn/blog_migrate/6590db5547b590e808cbcbb5889b6bfb.png
依然有辩论,HEAD(bd16a7c)体现dev_b第二次提交
https://i-blog.csdnimg.cn/blog_migrate/25e8b0dbca39690b534122db5610054a.png
辩论文件内容:
https://i-blog.csdnimg.cn/blog_migrate/d8ff07709d7eae6b9942285346411d0f.png
修改辩论文件,然后add
https://i-blog.csdnimg.cn/blog_migrate/0fa8fed5d5b2eb479565516db76bd4ac.png
继续rebase
https://i-blog.csdnimg.cn/blog_migrate/13e3955130b7b2b190bf98f847c2fda3.png
https://i-blog.csdnimg.cn/blog_migrate/375fa8712b65906f40799df8e6f80f4c.png
第一行改为:
https://i-blog.csdnimg.cn/blog_migrate/a9bc4b8055a84e3f13b6b31193bf9f28.png
保存退出,结果:变基乐成并更新refs/heads/master
https://i-blog.csdnimg.cn/blog_migrate/8afa5d96c81b6435b8d4e77bd2b8d43b.png
文件内容:
https://i-blog.csdnimg.cn/blog_migrate/a650466cb1591f037f827a5f6e42c1d1.png
切换到master,执行merge
https://i-blog.csdnimg.cn/blog_migrate/b382f5e9b81243ab376030ff836fa1c2.png
master送到远程仓库
https://i-blog.csdnimg.cn/blog_migrate/4f51fe811978b5834676aa3a324bf684.png
假如dev_b在合并前做了许多次commit,那么就要处理许多次辩论,每次解决后执行git rebase --continue
对于单条分支,rebase可以或许合并多个commit,将多个提交合并成一个提交,下令是:
   git rebase -i
    合并commit id之前的全部commit;-i选项可以或许提供一个交互界面,分阶段修改commit信息并rebase。
查察分支合并图

git log --graph --oneline
https://i-blog.csdnimg.cn/blog_migrate/b5aa5c962412c2537558fea0631b63d5.png
https://i-blog.csdnimg.cn/blog_migrate/2c6d7b9f42dfc506e6aff12a2e19bc5a.png
git log --graph
https://i-blog.csdnimg.cn/blog_migrate/a10ff618a8b3e302dfa4ef53a310e935.png
https://i-blog.csdnimg.cn/blog_migrate/a730f9a287e82eda8c4936508117fcd3.png 
结论:会修改提交历史,无法直观地看出哪些提交是在原分支上完成的,历史记录是一条直线(线性),会显得更为整洁,合并图更易读
分支后续操作

此时分支假如不要了就可以删除
假如要继续在分支在开发,需要同步master分支,rebase即可:
   切换到对应分支,使远程库和本地库同步:git pull --rebase origin master

如果有冲突忽略冲突(丢弃当前补丁的重放,即忽略掉当前补丁):git rebase --skip

如果有冲突,强制推送:git push -f origin 当前分支名,如果没有冲突:git push origin 当前分支名

    这里基于dev_a分支演示
当地
https://i-blog.csdnimg.cn/blog_migrate/adb2b579694d7d30bf568751db7fc7de.png
远程
https://i-blog.csdnimg.cn/blog_migrate/2f1f4d5ff9176647ea3116d2e71cca69.png
无辩论

rebase远程master分支
https://i-blog.csdnimg.cn/blog_migrate/84b20805256de18322ba26c69dc3f9b9.png
https://i-blog.csdnimg.cn/blog_migrate/34f49319caa06a7b60b19708f15af90a.png
推送dev_a到远程分支
https://i-blog.csdnimg.cn/blog_migrate/cf901eb45279107b8a50dfa77f24bfdb.png
远程分支内容
https://i-blog.csdnimg.cn/blog_migrate/f1ac9bbaf63c306a844477cc4dcbb7f6.png
commit id和主分支的一样
https://i-blog.csdnimg.cn/blog_migrate/3f3ae17c44a55a1e0182007036dbefc3.png
有辩论

修改dev_a分支文件内容,并推送到远程分支
https://i-blog.csdnimg.cn/blog_migrate/a2dfcc07d15ead1e9c35efe147464015.png
切换到master
https://i-blog.csdnimg.cn/blog_migrate/ed44dddea9c72c7c467780a08240686b.png
修改master分支文件内容,然后推送到远程
https://i-blog.csdnimg.cn/blog_migrate/cb361dfce1fa3387ae7b5075383138db.png
切换到dev_a分支,rebase远程master,出现辩论
https://i-blog.csdnimg.cn/blog_migrate/7311e687410d14b6f9090c50c0824438.png
丢弃当前补丁的重放,即忽略掉当前补丁,变基乐成并更新refs/heads/master
https://i-blog.csdnimg.cn/blog_migrate/d69b733fe001e33c4b5f083bf7047a19.png
文件内容和master一样
https://i-blog.csdnimg.cn/blog_migrate/11cd161d089db0bfa9c18a5f49ecd192.png
dev_a远程内容
https://i-blog.csdnimg.cn/blog_migrate/e45e76377fd21f2d8273da91e9728779.png
push到远程,报错
https://i-blog.csdnimg.cn/blog_migrate/21b5b910083925486222fff10c66b6c4.png
强制push到远程
https://i-blog.csdnimg.cn/blog_migrate/23d8807b0b4cd19d19a601c93baf2f67.png
远程分支内容
https://i-blog.csdnimg.cn/blog_migrate/0cd026713b402214953923f8d2f558f3.png
commit id和master一样
https://i-blog.csdnimg.cn/blog_migrate/db303d78de007e89635768808354455d.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Git必知必会底子(10):当地辩论(conflicts)解决--rebase