赞
踩
https://www.zhihu.com/question/56624823
IDEA里的操作方式:(这种方式对应git rebase -i,是功能最强,适用最广泛的,掌握以后可以处理很多需求)
1、点击菜单VCS->Git->ShowHistory
2、在History页上点击Log
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
5、在交互式rebase菜单中,将第一个选为pick,后面的都选为squash,点Start Rebasing
6、在Additional Rebase Input中编辑下压缩以后的commit message
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日志
2、选中第2个commit,右键菜单Reset Current Branch to Here
3、选择Soft,点Reset。
(1)hard :当使用这个命令后,工作区、暂存区的内容都会和当前head指向的内容相同。
也就是说hard之后,在本地分支中,所有代码都已经回到了指定的commit版本了,在这个版本之后的代码已经看不见了,想要看见的话,就先把本地分支删了,然后重新拉取该分支的远程库上的代码。
(2)soft: 当使用这个这个命令后,head指针指向指定的commit,但是工作区、暂存区的内容不会发生变化。
也就是idea 当前分支的history提交记录树看不见后面版本了,并且指定commit版本之后的代码文件在idea中重新显示为红色或者蓝色,表示这个文件未提交
(当然,这只是本地分支中未提交,对远程分支暂时还没任何影响)
这个时候再重新commit一次,这样就把这个commit版本之后的所有版本合并为一个新的commit了。后面只要强制push,用本地分支覆盖远程分支,这样就能实现多次commit合并为一次的效果。
(3)其他的用不着,自行百度
4、然后commit 提交到本地(别push,否则又会和远程分支的合并了)
5、使用命令行方式强制覆盖远程分支(请看第一种方式的第8点)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。