Android Studio Git教程
Posted Jadyli1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio Git教程相关的知识,希望对你有一定的参考价值。
android Studio Git教程
组里经常有新人不会使用Android Studio的git工具,也有分不清rebase、merge的,写篇文章普及下。转载请注明出处。
1 安装配置
建议在 mac 上使用 HomeBrew
来管理软件包,这里先安装 HomeBrew
:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
然后安装 git
:
brew install git
配置用户名和邮箱:
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
可以通过 git config <key>
来查看配置项。
git的基础提交、推送等操作可以查看我之前写的 Git实例教程。
2 merge和rebase
首先创建 master
分支,新建3个提交1,2,3,再从 master
分支切出 feature
分支:
接着在 master
新建一个提交4,在 feature
分支新建一个提交5:
然后在 feature
分支上 merge
master
:
可以发现提交4和提交5是并行的两条线,并且合并完后生成了一个新提交6(merge brach master into feature), 注意这个时候 feature
分支的基线没有变。
将 feature
分支强行 reset
回提交3,再次新建提交5,rebase
master
:
可以发现这是一条线,feature
分支的基线是从 master
的最新提交出来了(基线变更到了 master
的最新提交,所以 rebase
中文常称为变基)。
如果在 feature
merge
master
后,再 rebase
别的分支,feature
分支的提交会变成什么样?
我们从最开始的 master
分支切出 release
分支并新建一个提交7:
用 merge
完 master
的 feature
分支去 rebase
这个 release
分支:
可以发现,基线变成了 release
分支的提交,刚刚 merge
操作产生的两条并行的线也合并了(思考题:为什么变基会导致之前的 merge
操作也拉平?),并且可以发现来自 master
分支的提交4被放到了 feature
分支的提交5前面(思考题:为什么呢?)。
3 Android Studio git操作(基于4.2版本)
英文好的同学可以参考IDEA官方文档。
3.1 仓库
如果是新建的仓库要添加 git
支持,在 VCS
菜单下点击 Enable Version Control Integration
即可。
大多数情况是直接从远程拉取。选择 VCS
菜单下的 Get from Version Control
,填入仓库地址和本地准备存放的目录即可。
需要注意的是仓库地址,有两种地址,一种是https形式的,如果是私人仓库,会要求登录,另一种是ssh形式的,需要在远程存放本地生成的公钥。
本地生成公钥的命令:
ssh-keygen -t rsa -C "你注册GitHub时的邮箱地址"
拷贝公钥:
pbcopy < ~/.ssh/id_rsa.pub
github
、gitlab
等远程代码托管平台的设置里都有 SSH Keys
的设置,把拷贝的公钥添加进去就可以使用 ssh
了。
Android Studio
支持多远程仓库管理,我们主要有两个用途,一是针对工程下还有子仓库的情形,二是用于fork出来的仓库同步原仓库代码。
如上图所示,配置好多个远程仓库后,点击 Android Studio
右下角的分支名,弹出的窗口可以看到多个远程仓库,选中其中一个,可以进行 rebase
操作。
3.2 fetch
fetch
操作默认是在 VCS
菜单中 Git
集合里面的,可以通过设置调整到外面:
还可以放到 Toolbar
上,默认的 Toolbar
是隐藏的,可以在 View
菜单下让其显示出来。
再次编辑设置,把 Fetch
添加到 Toolbar
上,另外 Push
的位置也可以调一下。
可以看到 Toolbar
上多了个图标,这个图标就是 Fetch
操作。
3.3 pull
在终端中我们经常用 pull
命令来更新代码,但是在 Android Studio
中,可以使用 update project
来更新代码,好处在于,pull
是针对单个仓库的,update project
会针对这个项目中的所有仓库。
注意弹窗要选择 Rebase ...
,如果和远端有冲突,会有冲突提示弹窗。
3.4 commit
Android Studio
4.2版本开始 Commit
就作为单独的 tab
放在侧边栏了,先看下这个 tab
有哪些功能。
顶栏:
- Refresh: 刷新文件状态
- Rollback…: 回滚代码,点击会有回滚弹窗让你选择需要回滚的代码,双击弹窗中的文件可以在新弹窗中选择对特定的代码行进行回滚。
- Show Diff: 显示修改点
- Changelists: 修改文件列表,可以修改列表名,也可以新建列表,对于名称不是 “Default Changelist” 的列表,点击
Toolbar
的提交按钮时提交信息框会自动填充当前名称。提交时只会提交左边的方框勾选上了的文件。 - Shelve Silently:
Shelve
相当于终端操作的stash
,用于暂时存放代码,可以存放整个列表,也可以选择单个或者多个文件后点右键菜单中的Shelve Changes
进行选择性存放。 - Group By: 分组,有
Directory
和Module
两种方式。 - View Options: 一些显示相关的选项,比如是否显示
ignored
的文件。 - Expand All: 展开所有列表/文件夹/模块。
- Collapse All: 收起所有列表/文件夹/模块。
底栏左边是 commit
按钮,展开后可以选择 commit
完成后进行 push
。
底栏右边第一个是 Amend
选择项,勾选就是表示把本地修改合并到最后一次提交上,这是个相当于 rebase
的操作,需要 force push
才能推送到远程。
第二个是设置按钮。
- Anthor: 如果不是你修改的代码,可以指定修改人的名字,本次提交的作者也是显示这个名字。
- Sign-off commit: 在你的提交里添加一行签名,含义参考为什么要Sign Off?。
- Reformat code: 重新格式化你改动的代码行。
- Rearrange code: 重新编排代码,在
Code Style
设置中,有的语言会有一个Arrangement
的tab
,这里的Rearrange code
就是根据这些tab
定义的规则来执行的。 - Optimize imports: 优化导入,主要可以移除不用的
import
。 - Perform code analysis: 执行代码检查。
- Check TODO: 检查 TODO。
- Cleanup: 执行清理,有时候不会清理不用的代码,不太好用。
- Update copyright: 对新增文件自动添加
copyright
,需要设置中已经设置copyright
。
第三个是提交历史,选择后直接填充到提交信息框中。
3.5 push
点击 Toolbar
的 push
按钮,会弹出 push
对话框。
很简单的界面,多仓库的话会一起显示,可以勾选单个仓库进行 push
,右下角可以选择 Force Push
。
3.6 Git 窗口
如上图所示,左边侧边栏是针对左二的分支栏操作的。图标含义都比较清晰,"+" 号是指从选中的分支中切出新的分支,注意多仓库的情况,如果多仓库分支同名,会从各个仓库分别切出一个新分支,删除操作也是。
中间是分支提交历史,从搜索框到 Paths
都是过滤操作,Branch
、User
、Date
点击后都可以直接打字搜索。注意 Paths
,用于多仓库时选择本地仓库的,默认全选。樱桃是 cherry-pick
,可以把选中的提交提交到当前分支上。后面的 Turn IntelliSort on
主要用于 merge
操作过的分支,可以把 merge
的分支的历史显示在一块。
在提交上点击右键。
-
Create Patch…: 为当前提交创建一个
Patch
文件,会让你选择保存在本地的位置。 -
Checkout Revision ‘…’: 从当前选择的提交位置切出一个新分支。
-
Reset Current Branch to Here…:
Reset
操作,有四种模式- Soft 把
index
设置到选中提交,选中提交之后的提交会被放进暂存区 - Mixed 把
index
设置到选中提交,选中提交之后的提交不会被放进暂存区 - Hard 强制把
index
设置到选中提交,这是一个变基操作,本地未提交的修改全部废弃。 - Keep 强制把
index
设置到选中提交,本地如果有未提交的修改会提示是否Smart Reset
,Smart Reset
会把未提交的修改先stash
未提交的修改,强制reset
完成后再unstash
修改,这个过程是后台自动完成的。
- Soft 把
-
Revert Commit: 生成一个新提交,反向修改当前提交。
-
Undo Commit: 撤销提交到未提交状态,基本只能对最新一个提交使用。
-
Edit Commit Message…: 编辑提交信息,相当于
rebase
,需要强推。 -
Fixup…/Squash Into…: 鸡肋功能,本意是把本地的修改合并到选中提交,但是实际操作发现生成了一个新提交。
-
Drop Commit: 丢弃选中提交,
rebase
操作,需要强推。 -
Interactively Rebase from Here: 重点功能,用户整理提交历史。
这里可以改动提交顺序,编辑提交信息,合并提交,丢弃提交,Squash
和 Fixup
的区别只表现在提交信息上,Squash
会保留原有提交信息,Fixup
不保留。
3.7 解冲突
存在冲突时,会弹出冲突窗口,可以选择完全接受本地或者远程,也可以点 Merge...
或双击文件进行代码的合并。
解冲突窗口如上图所示。
3.8 常见场景
3.8.1 rebase错误导致变基到了错误分支
- 如果
rebase
前的代码已经推送到了远程仓库,那直接找到远程仓库的最后一次提交,reset hard
过去就好了。 - 如果之前的代码没有推送到远程,那使用
git reflog
找到本地的最后一次提交号,reset hard
过去。
以上是关于Android Studio Git教程的主要内容,如果未能解决你的问题,请参考以下文章
第七章 : Git 介绍 (下)[Learn Android Studio 汉化教程]
第七章 : Git 介绍 (上)[Learn Android Studio 汉化教程]