本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
系列
由于篇幅问题,一篇文章写完太长,因此分了几篇来写
Android Studio Git 进阶技巧 交互式变基实战教程
Android Studio Git 周边插件一览 - 掘金
介绍
尽管很多geek会使用命令行轻松的使用Git
,但是有些情况下,对小白来说GUI
确实可以大大加快工作流程。
目前市面上有很多优秀的Git GUI
客户端
比如 SourceTree
, Tower
, SmartGit
, GitKraken
这么多年换了几家公司接触下来,身边的同事几乎都是使用SourceTree
,不管是Windows
还是Mac
。
虽然我们的标题夸张了点,但是不代表SourceTree
不好用,相反,这款软件确实是非常好用的。
但是如果我们开发软件是IDEA
系列的话,我个人觉得还是IDEA
自带的Git GUI
更方便快捷,也更好用些,毕竟所谓IDE,就是集成开发环境嘛,能一个窗口搞定的,没必要搞两个软件,尤其是SourceTree
有的功能,Android Studio Git
基本都有,还有很多SourceTree
没有的贴心小功能,下面我们详细介绍。
功能介绍
首先一个入口在最上面的工具栏上
这个窗口我其实打开的很少,因为很多常用的功能比如Commit
, Push
, Update Project
等都是快捷键打开的,其他的一般也有其他入口打开。
但是git相关的操作基本都可以从这里进,所以接下来就按这菜单先简单介绍下Android Studio内置的小工具都有哪些功能。
Commit 提交
这个界面是我们平时打交道最多的界面了,打开大概分为4个区域
①区域这是文件修改区域,右上角可以选changelist,这是一个非常好用的功能,比如我同时修改2个bug,那我会建立2个changelist,每个list里只存放某个bug相关的修改。
这样我在提交的时候,每次提交都是内聚的,不会污染commit。
这个区域的左上角就是一些针对文件的操作,分别是
修改对比
,回滚文件
,刷新列表
,分类查看
②区域是填写commit日志的,可以看到右上角有3个按钮,最后一个是最近的日志历史记录
前两个则是我安装的插件,用来辅助写好更规范的日志的,插件暂不细说,先贴个图,我们后面还会单独说。
③区域则是文件对比,这一块可以看到直接是左右文件对比,也就是Side by Side,这样显示更友好,相对于
SourceTree
和git网页端默认的对比模式要友好太多了,当然,你要是更喜欢那种模式,也是可以更改的。其他的还有一些忽略条件啊,比如忽略空格,当我的改动只是增加了几个空格的时候,他会认为没有改变。 还可以选择高亮内容,比如行,单词等,功能非常强大。 一般如果我们有集成
code review
的话,比如我司用到Jetbrains
家的Upsource
,这里也能直接看到同事对代码的评论等。
④区域则是在提交之前,给我们做的一些操作,一般有插件干预的话,这里也会多出相应的内容,默认的有提交前自动格式化代码,重新排序代码,优化导入,代码分析等,可以看到功能真的是非常强大,而且深度集成IDE,配合插件,一条龙服务,非常的方便。
Push 推送
推送这个没什么好说的,基础的功能之一,Android Studio
自带的有个好处,假如我们的项目有很多子模块,我们可以一起性一起提交,如果使用SourceTree
来的话,就比较难实现了,至少默认没有办法做到,我了解到的就是利用SourceTree自定义脚本功能,跑我们的脚本去推送,这无疑增加了非常大的成本。
如下图所示
Update Project更新
这个则比较简单,我们拉取更新用的,有2个选择,一个是Merge,一个是Rebase,至于这2个有什么区别,这里不细讲了,不熟悉的可以自行搜索下,掘金有很多优秀的文章讲的很清楚
我一般都是使用Rebase来更新的,这样有助于我们保持干净的Commit记录,如果使用merge,很容易出现非常多的合并路线。
Merge 合并
这个也非常简单了,但凡是个GUI软件都会有的基础功能,下拉框是选择分支的,也就是我们当前的分支合并到哪个分支,然后Merge的时候,假如我们使用命令行的话,会有好几个额外的参数,比如 --no-ff
, --ff-only
,说实话,加入平时我们对这些参数不是使用的很频繁的话,即使学会了也很容易忘记,或者记错,Android Studio 自带的则可以直接下拉选择,后面还有贴心的使用介绍,熟悉的人只要稍微看一下就知道选取哪个。
Rebase 变基
基本和Merge
长一样,只要操作者注意下你在干什么就行了,毕竟很多小白不会用Rebase
的,后面我会详细介绍Rebase
在Android Studio
中的妙用。
Branches 分支管理
这个也是非常基础的功能之一了
我们可以看到 我们可以新建分支,检出Tag或者特定版本
下面还列出了所有的本地分支和远端分支,选中分支一下,针对该分支常规的操作都有
- checkout当前分支
- 基于此分支检出新分支
- 分支对比
- 对比分支
- rebase分支
- merge分支
- 更新分支
- 推送分支
- 重命名分支
- 删除分支
New Branch 新建分支
新建分支,填入分支名字即可。
New Tag 打tag
也是非常基础的功能了,填入相应的信息,我们的tag就打好了。
Reset Head 重置代码
这个是个危险操作,用来重置代码,一般git reset
的参数 --mixed
等也是以下拉选择的形式提供给操作者。 小白慎用!
Show Git Log 显示提交日志
这个就打开了另外一个更强大的界面,后面会详细介绍,很多我们日常操作与高阶操作都在这个界面进行。
Patch 补丁包
这里可以打Patch和应用Patch
这是一个git diff 生成的标准补丁包,相对于命令行来说,无疑也是简洁许多。
Uncommitted Changes 未提交改动
这个Shelf就是Android Studio的亮点之一了,虽然功能上类似于Stash,但是易用性和用途都是完爆git自带的Stash,这个后面也会再详细介绍。
Current File
则是最当前窗口中激活的文件的操作,比如
- 提交
- Add
- 展示Blame 详细信息
- 按行展示Blame信息
- 对比 (默认workspace和index对比,也就是相当于 git diff)
- 和某个提交对比
- 和分支对比
- 展示这个文件的历史记录
上面是把菜单所带的功能大概介绍了下,可以看出,Android Studio 自动的GUI已经是非常强大的了。
常规操作
下面再介绍下我们平时一直打交道的功能区
Local Changes 本地改动
上图中展示的就是Local changes的界面,我们先看下左边一列功能按钮都是干嘛的。
从上往下依次是
- 刷新文件状态,(有时候我们有一些文件没有追踪,或者有一些文件没有设置忽略,这时候配好后,刷新一下就好了)
- 提交选中的文件
- 回滚选中文件
- 对比选中文件 (workspace 和 index 对比)
- changelist管理
- 暂存选中文件 (暂存到第二个tab页中,区别于git自带的stash)
- 文件分类管理
- 查看忽略文件等
- 展开列表
- 收缩列表
- 显示右边具体内容栏
针对文件右键,有一些啊常用的功能
Shelf 本地暂存
这个要重点说一下,我觉得这是一个炸点。
首先先说下他和Git
自带的stash
的区别。
shelve是JetBrains的产品功能(例如WebStorm,PhpStorm,Android Studio等)。它将搁置的文件放入.idea/shelf目录中。
stash是git选项之一。它将存储的文件放在.git目录下。
我们先看下使用shelve的效果是什么,最后再说结论。
当我们对 Default Changelist
中的第一个文件 activity_main2.xml
做shevle
操作,再对 未完待续
这整个changelist
做shelve
。
我们切到 Shelf
tab看下。
这2个文件的修改记录就从Local Changes
迁移到了 Shelf
中,,由IDE帮我们管理。
这时候我们需要重新应用的时候,只需要在需要的地方右键恢复即可。
可以看到我们不仅可以对整个列表进行恢复,也可以单独对某个列表中的某些文件做恢复。
总结下
git stash
和 IDEA Shelf
功能简单一看有很多相似之处,用来暂存代码,给我们工作区一个干净的环境,但是 Shelf
的颗粒度更细致,如果使用git stash
,一次stash
5个文件,那恢复的时候只能5个一起恢复,另外git stash
的使用也不是太方便,需要敲命令行,而且默认命名 比如 change@1
, change@2
这样,辨识度非常低。
所以我建议如果是使用IDEA系列软件的话,这一点上完全可以使用Shelf
,抛弃笨重繁琐的git stash
。
Log git日志
这个就是 Android Studio
自带的查看git log
的界面。
可以看到分为左中右三栏,左边是分支的选择,中间是某个分支的路线图,右边是选中的某次提交的具体信息。
针对某次提交,我们右键看一下,有很多实用的功能。
其中绿色圈起的是精华所在,很多命令行要敲不少命令的热频操作,这里都做了集成。
比如快捷修改某次提交的 Commit Message
。
比如快捷用来和某次提交合并
还有非常强大的交互式变基(这个也是精华所在,可以用来给我们的提交更换位置,合并整合等)
这里只是先简单介绍下,关于这个交互式变基我在这篇文章里有详细说明。
总结
此文走马观花般的将Android Studio
自带的Git
小工具所具有的功能简单过了一遍,到这里其实就能发现,这个内置小工具完全不输市面上任何Git GUI
了。
由于他是内置的,所以对我们写代码来说相比于其他软件,无疑更顺手,再搭配各种各样的插件,我们几乎能实现我们所能想到的一切和git相关的功能,这就是标题我所说的强大一百万倍的理由了,他除了自身功能完善之外,还能利用插件做到无限可能,厉不厉害!
由于本文篇幅过长了,一些我这些年使用过程中用到的,学到的一些小技巧,我单独成文了,地址在开头,大家自取。
「欢迎在评论区讨论,掘金官方将在掘力星计划活动结束后,在评论区抽送100份掘金周边,抽奖详情见活动文章」。