常用的两种使用场景:
- 合并多次 commit 提交
- 合并其他分支代码
开始
github
上新建仓库:learn-rebase
,设置默认分支master
,或许你的默认分支是main
,基于master
分支新建开发分支:dev
,如图:
仓库中只有README.md
,内容如下:
1. 合并多次 commit 提交
例如,我们基于dev
分支开发A功能
,开发过程中共产生了 3 次commit
,每新建一个文件就commit
一次,如图:
此时,我想合并这 3 次commit
,在远程仓库上只体现 1 次commit
,怎么做呢?
执行以下命令来实现:
// git rebase -i [startpoint] [endpoint]
Mac:learn-rebase fanyanbo$ git rebase -i 5541c74775d37a587f233ed317511647900aba0d c0c5629757353fdc53d79232377b01f96e62121b
回车,进入下一交互界面:
上述交互界面中,输入i
,进入INSERT
编辑模式,修改下图的红框部分
,我们将后两次commit
的pick
改成squash
,目的是将 3 次commit
合并,好好对比下修改前后红框中的内容:
完成修改后按esc
退出编辑,输入:wq
保存退出,进入下一交互界面:
同样,进入编辑模式,修改红框中的commit message
,这里我改成了完成A功能
,如下图,保存退出。
git log
查看下,3 次commit
变成了 1 次commit
,commit
记录看上去清爽多了:
迫不及待的git push
,却发现报错了:
wtf
,执行git branch -a
,原来我们进入了基于dev
切出来的临时分支(no branch)
:
遇事不要慌,按以下步骤解决:
再看一眼git log
,ok,没问题:
执行git push
,一切顺利,去github
看下dev
分支的提交记录:
2. 合并其他分支
接着上文,我们在dev
分支开发A功能
的同时,团队其他成员也在开发同一项目的B功能
:增加d.js
、e.js
文件,修改README.md
,B功能
完成后提交合并至master
分支:
如何合并包含新提交内容(B功能
)的master
分支呢?很简单,在当前dev分支
执行git rebase master
:
以上就完成了合并,查看dev
分支的项目代码:有了d.js
、e.js
文件,README.md
也变了,git log
看下commit
记录
但分支代码冲突的场景更加常见,如果开发A功能
和B功能
时都修改了同一文件,例如你之前开发A功能
时也改了README.md
内容,那可能就产生冲突(conflict
)了,如下图所示:
结束
优秀的人,都在"刻意练习"。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!