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:

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教程的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio Git教程

第七章 : Git 介绍 (下)[Learn Android Studio 汉化教程]

第七章 : Git 介绍 (上)[Learn Android Studio 汉化教程]

Android Studio的Github教程

Android Studio 非命令行Git 版本控制超详细讲解教程

Android Studio版本控制之Git篇(服务器gitblit)