赞
踩
答完以后我只想吐槽下,这种操作还是命令行里来的方便。答案里提供了3种操作流程,个人习惯第2种方式,但这个只适合压缩最后n个commit的情况。第一种方式最佳,建议熟练掌握。第三种方式纯粹蛋疼,可以不看,但对理解git会有所帮助。用命令行的话,其实还有很多方法,但都不是常规手段了,对理解和学习运用git底层原理有帮助。
---------------------------------------------------------------------------------------------------------------
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.完工
另外,可以用以下命令实现:git reset --soft;
git commit
IDEA里的操作方式:
1.同上
2.同上
3.选中第2个commit,右键菜单Reset Current Branch to Here
4.选择Soft,点Reset。这里选Mixed似乎也可以,IDEA中接下来的那个Commit Changes好像包含了git add的操作。
5.菜单VCS->Commit Changes,完成。
还有一种方式,利用以下命令实现:git checkout ;
git merge --squash;
git commit;
#记录下当前的commit sha1;
git checkout ;
git reset --hard;
IDEA的操作方式:
1.同上
2.同上
3.目标同上,假设要压缩的commit在master分支上,选中第2个commit,右键菜单Checkout Revision
4.菜单VCS->Git->Merge Changes,Branches to merge选择master,勾上Squash commit,点击Merge
5.菜单VCS->Commit Changes,选择要commit的文件,编辑下Commit Message,点Commit。如果警告说当前在detached HEAD状态,忽略,点Commit。
6.这时History的Log页面上可以看到以下状态,detached HEAD状态可以看成是一个无名分支
7.选中detached HEAD,右键菜单Copy Revision Number,最好粘贴在一边以防粘贴板被其它操作覆盖
8.选中master所在的commit,右键菜单Branch 'master'->Checkout
9.菜单VCS->Git->Reset HEAD,Reset Type选择Hard,To Commit填入第7步中复制的commit sha1,点Reset。完工。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。