Android Studio Git教程

1 篇文章 0 订阅
1 篇文章 0 订阅

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 分支:

-w208

接着在 master 新建一个提交4,在 feature 分支新建一个提交5:

-w196

然后在 feature 分支上 merge master

-w202

可以发现提交4和提交5是并行的两条线,并且合并完后生成了一个新提交6(merge brach master into feature), 注意这个时候 feature 分支的基线没有变。

feature 分支强行 reset 回提交3,再次新建提交5,rebase master

-w201

可以发现这是一条线,feature 分支的基线是从 master 的最新提交出来了(基线变更到了 master 的最新提交,所以 rebase 中文常称为变基)。

如果在 feature merge master 后,再 rebase 别的分支,feature 分支的提交会变成什么样?

我们从最开始的 master 分支切出 release 分支并新建一个提交7:

-w73

mergemasterfeature 分支去 rebase 这个 release 分支:

-w215

可以发现,基线变成了 release 分支的提交,刚刚 merge 操作产生的两条并行的线也合并了(思考题:为什么变基会导致之前的 merge 操作也拉平?),并且可以发现来自 master 分支的提交4被放到了 feature 分支的提交5前面(思考题:为什么呢?)。

3 Android Studio git操作(基于4.2版本)

英文好的同学可以参考IDEA官方文档

3.1 仓库

如果是新建的仓库要添加 git 支持,在 VCS 菜单下点击 Enable Version Control Integration 即可。

-w306

大多数情况是直接从远程拉取。选择 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出来的仓库同步原仓库代码。

-w677

-w403

-w437

如上图所示,配置好多个远程仓库后,点击 Android Studio 右下角的分支名,弹出的窗口可以看到多个远程仓库,选中其中一个,可以进行 rebase 操作。

3.2 fetch

-w311

fetch 操作默认是在 VCS 菜单中 Git 集合里面的,可以通过设置调整到外面:

-w982

还可以放到 Toolbar 上,默认的 Toolbar 是隐藏的,可以在 View 菜单下让其显示出来。

-w459

再次编辑设置,把 Fetch 添加到 Toolbar 上,另外 Push 的位置也可以调一下。

-w982

可以看到 Toolbar 上多了个图标,这个图标就是 Fetch 操作。

-w1142

3.3 pull

在终端中我们经常用 pull 命令来更新代码,但是在 Android Studio 中,可以使用 update project 来更新代码,好处在于,pull 是针对单个仓库的,update project 会针对这个项目中的所有仓库。

-w388

注意弹窗要选择 Rebase ...,如果和远端有冲突,会有冲突提示弹窗。

3.4 commit

-w620

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: 收起所有列表/文件夹/模块。

-w625

底栏左边是 commit 按钮,展开后可以选择 commit 完成后进行 push

底栏右边第一个是 Amend 选择项,勾选就是表示把本地修改合并到最后一次提交上,这是个相当于 rebase 的操作,需要 force push 才能推送到远程。

第二个是设置按钮。

-w434

  • 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

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

-w472

3.5 push

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

-w797

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

3.6 Git 窗口

-w1465

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

中间是分支提交历史,从搜索框到 Paths 都是过滤操作,BranchUserDate 点击后都可以直接打字搜索。注意 Paths,用于多仓库时选择本地仓库的,默认全选。樱桃是 cherry-pick,可以把选中的提交提交到当前分支上。后面的 Turn IntelliSort on 主要用于 merge 操作过的分支,可以把 merge 的分支的历史显示在一块。

在提交上点击右键。

-w254

  • 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: 重点功能,用户整理提交历史。

-w1000

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

3.7 解冲突

-w723

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

-w1152

解冲突窗口如上图所示。

3.8 常见场景

3.8.1 rebase错误导致变基到了错误分支
  • 如果 rebase 前的代码已经推送到了远程仓库,那直接找到远程仓库的最后一次提交,reset hard 过去就好了。
  • 如果之前的代码没有推送到远程,那使用 git reflog 找到本地的最后一次提交号,reset hard 过去。
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值