idea使用Git插件版本控制,交互式变基,rebase
本文是idea2020.3月版本,旧版本使用起来有细微区别
主分支master,基于master拉的功能分支master_skk
此时master_skk分支上,新增了2个提交记录,领先master分支2个提交记录,而master分支上,新增了1个提交记录,即master_skk分支相比于master主分支,落后一个提交,领先二个提交!
为了保证git提交记录的简洁及便于代码回退,需要rebase交互式变基,既获取落后于master的的最新提交记录,又压缩自己的多次提交记录为一条,最终效果变为0/1
首先切换到自己的分支master_skk, 然后pull拉取最新代码,然后按照下图序号进行操作
选中想合并的提交记录,然后选中图6标识的Squash,具体和fixup,reword等区别,看文末链接
如图可以看到,变基成功,不仅获取了master最新的提交记录,自己的提交记录也压缩成了一条!
如果自己分支的几个提交都是本地的,还没有提交到远程分支master_skk上,那么就可以直接push推到远程,但一般我们总要合自己代码到dev/test,所以必然是已经提交到自己远程分支上了, 此时当你去push你的commit时,会再次与你远程分支的commit合并,之前本地rebase的那些commit又会出现了。所以,如果想rebase远程分支,那么还需要下面一个步骤
(1)这个远程分支只有你一个人在开发
此时没有其他人会进行提交操作,那么可以直接进行强制推送 git push -f
–f可以直接理解为用你本地分支的状态区覆盖掉远端origin分支的状态,也就是执行过后,本地的分支什么样,远端分支就什么样
(2)远程分支有多人开发
此时如果你贸然的使用--force命令,会有覆盖掉其他人提交代码的风险。比如,小明和小红两个人同时在feature分支上进行开发,小明已经在feature分支上提交了一部分代码,而小红此时执行了rebase操作,所以如果想要推送到远端仓库就必须使用 --force 参数,而小红推送成功之后就会覆盖掉小明提交的代码(前面说过--force就是用本地状态覆盖掉远端状态)。在这种情况下,推荐另外一种更安全的命令
git push --force-with-lease
使用该命令在强制覆盖前会进行一次检查如果其他人在该分支上有提交会有一个警告,此时可以避免覆盖代码的风险。
如图9 我用命令推送远程后,才是实际的交互式变基成功!
此时如果查看gitlab,自己的分支应该是最佳的0/1了
这时候,如果自己没有合分支到的master权限,就点击图上的merge request,让有权限的人合自己的分支代码,如果有权限直接切换到master分支, 拉取最新master代码, 然后如图10操作
此时可以看到,master已经合好了功能分支master_skk的代码,且只有1条合并记录(第1次提交),并且位于master的新增提交(master主分支新增文件2)之后!
图11操作后,自己代码完全合到master分支,告一段落!
参考链接:
在idea上实现git rebase操作,适用于老版本idea,有讲解rebase几种方式的区别
在idea上实现git rebase操作_xiaowei_582648206的博客-优快云博客_idea rebase
idea git rebase 和reset合并多条commit记录变为一条,二种方式讲解
idea git rebase 和reset合并多条commit记录变为一条_我叫周利东的博客-优快云博客_idea rebase合并多次提交
idea新版2020.03 git rebase操作
Git 更安全的强制推送,--force-with-lease
Git 更安全的强制推送,--force-with-lease - walterlv - 博客园