文本持续更新一些工作中实用的idea技巧
关于用命令行还是工具
虽然使用命令操作很高大上,但是为了方便和高效,还是推荐使用图形化工具,作为java开发,个人强烈推荐使用idea自带的git工具。
git操作那么多,你都会用已经很牛逼了,在你理解这些操作流程之后在一些特殊场景不得不使用命令行时,查一查文档慢慢操作就可以了。idea的git工具会记录这些命令
先简单过一下idea的git工具界面
(这一章节么得啥子的意思,秀一下最新版的IDEA)
- 配置(略)
- 远程拉取项目
- git面板
- 分支管理(右下角)
- 快捷操作
- 所有操作选项
1. 冲突的解决
场景1 单分支冲突
早上上班张三和你都在dev1 的最新代码开始开发,张三下班push完溜了,你push时发现和张三代码冲突了,弹出和远程代码冲突的对话框(PS:关于merge和rebase个人比较喜欢用reBase(变基))
冲突必然意味着决定代码去留和整合后编译是否通过,逻辑是否正确等问题,对于别人写的代码有问题应该讨论沟通,避免给别人的代码引入bug
点击merge,IDEA解决冲突的这个界面还是很赞的!!!
解决完冲突记得再次push一次
用rebase和merge分别处理完冲突的区别
rebase:当分支很多时,由于变基的操作,不会有很多分支线交错,提交记录很清晰
场景2 两个分支合并时冲突(这种场景很少)
张三和我分别在dev1和dev2分支开发不同的功能,完成后老板想让张三的功能加到我的分支上来
冲突处理和上面讲的一样,这里主要看dev1分支的代码怎么同步到dev2
**注意:**这个场景很少,因为dev1和dev2的差别可能不只是暂时开发完成的两个功能不同,还会有很多历史功能都不相同,这个操作会把dev1的所有代码同步过来,风险很大,只同步某1次的提交在后面的cherry-pick中说明
使用rebase
分支切换到dev2,编辑框空白处右击,然后按图操作
结果:rebase变基,分支线只有一条
使用merge
结果:分支线交会
场景3 开发分支与主分支冲突(常见情况)
张三使用dev1开发完成后要将代码合并到master主分支上(流程:commit => push => pull request => merge tomaster,一般开发是没有master分支的push权限的) 然后远程仓库从dev1合并到master时发生冲突()。
此时需要在本地将master远程仓库的代码merge/rebase到dev1,然后dev1 重新push ,一般pull repuest
会自动更新,流程大致同场景2。
场景4 cherry-pick 将一个分支的1次提交同步到另一个分支
例如:将的dev1中的两次提交同步到dev2
线切换分支到dev2
双击dev1 分支名,使面板显示dev1的提交记录
可能会有冲突要解决,解决会新建一条提交记录
双击dev2,切换列表,查看结果:(新提交一次记录)
场景5 git unstash 暂存代码恢复时产生冲突
冲突的解决同上文
这里说明stash的用法
应用场景
开发过程中需要切换到别的分支处理问题,需要将未提交代码先暂存起来,等分支切回来复原暂存的代码
开发到一半发现整错分支了,将未提交的代码暂存,到正确的分支复原暂存的代码
读代码标记了很多注释,暂存下来,下次看时将标记和注释复原下来看
怎么使用
- 存
执行完成之后编辑器内这些未提交的代码就不见了 - 取
找到stash管理里窗口
说明一下分支管理
网上搜一下gitflow,了解下行业内分支管理的最佳实践
会发现rebase和merge都适合与不同的场景,这里就不赘述了
2. 多次提交记录合并(利用rebase变基)
张三同学在写一个需求,边测试边改代码,一直在提交、测试,导致git log全是些无关紧要的message,特别不好看,很冗余
最终张三完成需求之后,打算把这些提交合并到一次提交中。
在弹出的对话框上操作
结果:
3. 同步分支
场景1 远程有,本地没有
场景2 分支本有,远程没有
push时远程仓库自动创建
github好用的技巧
// TODO