idea git rebase

https://www.zhihu.com/question/56624823

一、第一种方式,操作相对复杂

IDEA里的操作方式:(这种方式对应git rebase -i,是功能最强,适用最广泛的,掌握以后可以处理很多需求)

1、点击菜单VCS->Git->ShowHistory

2、在History页上点击Log

idea git rebase

3、例子中有4个commit(将init commit看成第1个),假如要将上面最后2个commit(第4和第3个)压缩成1个,那么选中第2个commit(第3个的parent),右键菜单Copy Revision Number,把复制的commit sha1粘贴在一边,防止粘贴板内容被后续的操作覆盖掉

4、菜单VCS->Git->Rebase,勾上Interactive,Onto粘贴第3步中复制的commit sha1

idea git rebase

5、在交互式rebase菜单中,将第一个选为pick,后面的都选为squash,点Start Rebasing

idea git rebase

6、在Additional Rebase Input中编辑下压缩以后的commit message

idea git rebase

7、如果上面几个提交都是本地的,还没有提交到远程分支上,那么到此就完工了。

但是,如果上面的几个提交都已经提交到远程仓库上了。那么当你去push你的commit时,会再次与你远程分支的commit合并,之前本地rebase的那些commit又会出现了。

所以,如果想rebase远程分支,那么还需要下面一个步骤。

8.、参考自:https://blog.csdn.net/ManyPeng/article/details/81095744

(1)这个远程分支只有你一个人在开发

此时没有其他人会进行提交操作,那么可以直接进行强制推送 git push --force origin branchName,–force可以直接理解为用你本地分支的状态区覆盖掉远端origin分支的状态,也就是执行过后,本地的分支什么样,远端分支就什么样

(2)远程分支有多人开发

此时如果你贸然的使用–force命令,会有覆盖掉其他人提交代码的风险。比如,小明和小红两个人同时在feature分支上进行开发,小明已经在feature分支上提交了一部分代码,而小红此时执行了rebase操作,所以如果想要推送到远端仓库就必须使用 - -force 参数,而小红推送成功之后就会覆盖掉小明提交的代码(前面说过–force就是用本地状态覆盖掉远端状态)。在这种情况下,推荐另外一种更安全的命令 git push --force-with-lease origin branchName 使用该命令在强制覆盖前会进行一次检查如果其他人在该分支上有提交会有一个警告,此时可以避免覆盖代码的风险。

 

二、操作简单

1、ShowHistory打开git日志

idea git rebase

2、选中第2个commit,右键菜单Reset Current Branch to Here

idea git rebase

3、选择Soft,点Reset。这里选Mixed似乎也可以,IDEA中接下来的那个Commit Changes好像包含了git add的操作。

idea git rebase

4、然后commit 提交到本地(别push,否则又会和远程分支的合并了)

5、使用命令行方式强制覆盖远程分支(请看第一种方式的第8点)