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:

mergemasterfeature 分支去 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

githubgitlab 等远程代码托管平台的设置里都有 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: 分组,有 DirectoryModule 两种方式。
  • 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 设置中,有的语言会有一个 Arrangementtab ,这里的 Rearrange code 就是根据这些 tab 定义的规则来执行的。
  • Optimize imports: 优化导入,主要可以移除不用的 import
  • Perform code analysis: 执行代码检查。
  • Check TODO: 检查 TODO。
  • Cleanup: 执行清理,有时候不会清理不用的代码,不太好用。
  • Update copyright: 对新增文件自动添加 copyright ,需要设置中已经设置 copyright

第三个是提交历史,选择后直接填充到提交信息框中。

3.5 push

点击 Toolbarpush 按钮,会弹出 push 对话框。

很简单的界面,多仓库的话会一起显示,可以勾选单个仓库进行 push ,右下角可以选择 Force Push

3.6 Git 窗口

如上图所示,左边侧边栏是针对左二的分支栏操作的。图标含义都比较清晰,"+" 号是指从选中的分支中切出新的分支,注意多仓库的情况,如果多仓库分支同名,会从各个仓库分别切出一个新分支,删除操作也是。

中间是分支提交历史,从搜索框到 Paths 都是过滤操作,BranchUserDate 点击后都可以直接打字搜索。注意 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 ResetSmart Reset 会把未提交的修改先 stash 未提交的修改,强制 reset 完成后再 unstash 修改,这个过程是后台自动完成的。
  • Revert Commit: 生成一个新提交,反向修改当前提交。

  • Undo Commit: 撤销提交到未提交状态,基本只能对最新一个提交使用。

  • Edit Commit Message…: 编辑提交信息,相当于 rebase ,需要强推。

  • Fixup…/Squash Into…: 鸡肋功能,本意是把本地的修改合并到选中提交,但是实际操作发现生成了一个新提交。

  • Drop Commit: 丢弃选中提交,rebase 操作,需要强推。

  • Interactively Rebase from Here: 重点功能,用户整理提交历史。

这里可以改动提交顺序,编辑提交信息,合并提交,丢弃提交,SquashFixup 的区别只表现在提交信息上,Squash 会保留原有提交信息,Fixup 不保留。

3.7 解冲突

存在冲突时,会弹出冲突窗口,可以选择完全接受本地或者远程,也可以点 Merge... 或双击文件进行代码的合并。

解冲突窗口如上图所示。

3.8 常见场景

3.8.1 rebase错误导致变基到了错误分支

  • 如果 rebase 前的代码已经推送到了远程仓库,那直接找到远程仓库的最后一次提交,reset hard 过去就好了。
  • 如果之前的代码没有推送到远程,那使用 git reflog 找到本地的最后一次提交号,reset hard 过去。

Android Studio Git教程相关推荐

  1. Android Studio 权威教程

    [Android Studio 权威教程]打包.生成jks密钥.签名Apk.多渠道打包 [Android Studio 权威教程]多渠道打包和一键完成(全部产品)打包并签名 [Android Stud ...

  2. android studio控件使用方法,android studio使用教程

    android studio使用教程 Android Studio是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studi ...

  3. [Android Studio 权威教程]Windows下安装Android Studio

    从AS 0.5版本号開始使用.也是AS的推行者,在ApkBus公布的第一篇Android Studio Perview 2 获得了50K的浏览,1800多条回复下载. 在我的[Android Stud ...

  4. linux安装 Android Studio详细教程,支持性较差,需要安装最新底层库内核的linux

    安装 Android Studio详细教程 libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 jdk1.8.0_25 android-st ...

  5. Android Studio系列教程三:快捷键

    原文出处:http://stormzhang.com/devtools/2014/12/09/android-studio-tutorial3/ Android Studio 1.0正式版发布啦 今天 ...

  6. ANDROID STUDIO详细教程汇总

    这个系列教程在Android Studio Beta版本的时候就开始着手编写,当时就认为AS绝对会成为Android开发的未来,时至今日印证了当时的观点,作为国内最早一批AS教程之一,可以帮助从未接触 ...

  7. 史上最详细的Android Studio系列教程四--Gradle基础

    史上最详细的Android Studio系列教程四--Gradle基础 转载于:https://www.cnblogs.com/zhujiabin/p/5125917.html

  8. 最全面的Android Studio使用教程【申明:来源于网络】

    最全面的Android Studio使用教程[申明:来源于网络] http://www.admin10000.com/document/5496.html 转载于:https://www.cnblog ...

  9. [转]Android Studio系列教程六--Gradle多渠道打包

    转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...

最新文章

  1. 用Eclipse 开发Dynamic Web Project应用程序
  2. spring注解事务
  3. python百题百练 二级题目_CSDN Python语感百题(一)
  4. word2vec训练词向量 python_使用Gensim word2vector训练词向量
  5. php程序内存空间,php如何管理内存
  6. 新华三社招流程_【面试经验|校招】新华三/产品经理
  7. 【华为推荐】基于反事实学习的推荐系统研究.pdf(附pdf下载链接)
  8. Linux 远程连接工具 【vnc viewer】 图形界面
  9. bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)
  10. AD模式下出现NetLogon 5781错误的对策
  11. qt 定义一个长度的数组_6.8 C++字符数组
  12. ESP-Drone控制板设计的第二个任务-绘制USB-TTL串口下载电路和ESP32-S2芯片内置USB接口电路
  13. android 遍历短信,Android通过for循环批量发送短信
  14. 算高差改正数的计算机程序,水准测量中的高差改正数应该怎么算?我们是六个点,而且每次只能观测两个点,也就是有六个测段...
  15. 判断是不是iphone x齐刘海屏幕
  16. 2023届嵌入式笔面经一位双非本科生的秋招日记
  17. 嘀嘀打车、快的打车该醒醒了
  18. 22年最后一次PMP考试时间定了-11月27日,进来了解相关内容信息
  19. 商业银行软件开发中心的困惑
  20. 画个五角星的方法c语言,急!请问,如何用C语言画一个五角星(用*组成)?

热门文章

  1. [渝粤教育] 西南科技大学 律师实务 在线考试复习资料2021版(1)
  2. vm虚拟机输入法_VM虚拟机中fedora28 无法使用中文输入法问题
  3. python 人民币兑美元汇率代码_人民币对美元汇率的大数据分析与预测【完整代码】...
  4. 华为西安鲲鹏服务器项目,眼见为实,华为鲲鹏架构服务器生态大揭秘
  5. 002 反相器的动态特性
  6. ES8新增的常用语法
  7. 斐讯k3怎么设置虚拟服务器,斐讯K3路由器无线中继怎么设置?
  8. win7 visual studio code安装和使用
  9. OBS Studio(obs录屏软件)官方中文版V27.2.4 | 最新obs中文版百度云下载
  10. promise,回调地狱