介绍Android Studio使用Git最详细的文章

作者简介  原创微信公众号郭霖 WeChat ID: guolin_blog

本篇来自温斯渤的投稿,分享了如何在Android Studio使用Git,十分详细,希望对大家有所帮助。

温斯渤的博客地址:

http://wensibo.top

前言

本文较长,图片很多很多,流量党慎入(建议电脑端查看)

使用 Git 已经有一段时间了,但是之前都是使用 Git Bash,在 Android Studio上使用 Git 一开始不是很习惯,就像用惯了 SVN 来使用 Git 一样,琢磨了一段时间的 Android Studio,也看了我觉得为数不多但是很有质量的介绍AS的书籍 《Android Studio实战 快速、高效地构建Android应用》,强烈安利大家哦!所以就写了这篇文章跟大家一起学习如何在 Android Studio 高效地使用 Git。

另外一点需要说明的就是本文中大量使用 Android Studio 的快捷键,如果你不熟悉,可以看看我的另外一篇文章:

http://wensibo.top/2017/03/09/Android%20Studio%E5%BF%AB%E6%8D%B7%E9%94%AE%E6%80%BB%E7%BB%93/

安装Git

我使用的是Windows,所以我这里只能介绍Windows下安装Git的过程了。

https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit

访问上面地址选择符合你的版本,直接安装就行了。

安装完成之后,在开始菜单中找到 Git-->Git Bash,如果出现类似下面的对话框的话就证明安装成功了。

Git界面

安装成功之后,需要配置一下你的信息,直接在上面的命令行中输入以下命令:

注意:

1.将上方的 Your Name 换成你自己的名字,随意起都行。

2.将上方的 email@example.com 换成你自己的邮箱。

3.讲一下 git config 命令的 --global参数,用了这个参数,表示你这台机器上所有的 Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

Android Studio配置Git

使用快捷键 Ctrl+Alt+S 打开 Settings,接着点击 Version Control --> Git 在 Path To Git Executable 上输入 Git 的存放位置,如下图:

之后点击旁边的Test按钮,如果出现如下的成功提示,说明Git配置成功。

接着按照下图配置你的 Github账号密码,输入完成之后点击 Test按钮,如果账号密码都正确的话就会提示成功,那么就可以继续往下走了:

创建本地仓库

不管你是刚刚新建的项目,亦或是已经写好的项目,进行的操作都是一样的。这里我以新建一个名为MyGit的项目为例子。

对于一个已经新建好的项目,找到菜单栏上的 VCS,按照下图进行操作:

选择项目的根目录为git初始化的目录:

初始化之后你会发现原本文件的文件名都是白色的,现在变成了棕色,这表示文件已经被git跟踪了,但是并没有添加到仓库中:

忽略文件

我们知道,在 git 初始化一个仓库的时候会自动生成一个.gitignore文件,这个文件用来忽略那些不用加入到仓库的文件,在我们这个工程中总共生成了两个 .gitignore 文件,分别是在项目根目录下,以及在app文件夹下。我们可以对这些文件进行编辑,表示我们需要忽略哪些文件,但是一般情况下,我们选择默认就好,除非你有需要就进行适当的修改:

添加文件

添加文件就如 git 命令中的git add,在 Android Studio 中 add 的方式有四种,但是都是大同小异,让我来一一举例:

1.选中项目的根目录,右键选中Git,再选中Add,如下图:

2. 选中项目根目录,点击菜单栏中的VCS菜单,选中Git–>Add,如下图:

3. 使用快捷键Alt+9,或者点击屏幕下方的Version Control工具按钮

打开版本控制的窗口,可以看到应该是如下图的样子,该窗口有两个下拉栏,一个是Default,用来记录已经添加的文件,另一个是 Unversioned files,用来记录已经被跟踪但是未添加的文件。

右键 Unversioned files,选中Git–>Add,如下图:

4. 使用快捷键Ctrl+Alt+A

add之后文件名变成了绿色,这是代表已经添加进仓库为文件,接下来就可以 commit 文件了,使用快捷键 Ctrl+K 或者 选中工程根目录右键 Git-->Commit Directory 可以调出 commit 窗口,如下所示,在其中选择你想要提交的文件,填写提交的信息,在Author文本框中可以填写提交此次提交的操作者名字,如果不填写的话,就会默认是之前配置Github账号的用户名。可以看到,提交之后文件名重新变回了熟悉的白色

首次提交

提交成功之后,你可以使用快捷键 Alt+9,或者点击屏幕下方的 Version Control 工具按钮,切换到Log菜单查看Log日志,如下图所示:

首次提交Log日志

如何clone项目

使用Git clone项目到本地中是很简单的,在Android Studio中也是如此,首先找到你喜欢的项目,fork到你自己的仓库之后,点击Clone or Download按钮,复制地址,如下图所示:

接下来回到 Android Studio,按照下图的操作可以打开clone的对话框,在地址栏中粘贴刚才复制的地址,点击 Test按钮,测试是否可以通过,如果成功,那么久可以点击Clone导入项目了。

回到我们最开始讲的MyGit项目,首先我们需要模仿一下在日常开发中使用Git的情形,例如我们经常会在分支上进行工作,所以熟练地掌握分支工作的流程以及技巧是十分重要的,接下来我会使用具体的例子跟大家一起了解如何在 Android Studio 上使用分支进行开发。

以下举得例子将会围绕Git的一种工作模式,即:Git Flow,如果你对此不是很了解,那么推荐阮一峰老师的文章:

http://www.ruanyifeng.com/blog/2015/12/git-workflow.html

Git flow

Git flow是广泛采用的一种工作流程

他的主要特点有两个:

1.首先,项目存在两个长期分支:

主分支master

开发分支dev

前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版;后者用于日常开发,存放最新的开发版。

2. 其次,项目存在三种短期分支

功能分支(feature branch)

补丁分支(hotfix branch)

预发分支(release branch)

新增功能1:显示HelloWorld

正如我们在介绍 Git flow 介绍的,master 分支只是用于产品的发布,在平时的开发中是不会使用它的,而只会使用 dev分支,但是如果我们有了新的功能,一般是会在 dev分支 中在创建一条该功能的分支,所以我们应该这样做。

创建dev、feature-1分支,并且我们需要转到feature-1分支上

在 Android Studio 中,我们可以很方便的管理分支,在主界面的右下角,点击Git可以出现当前的分支,默认为 master,我们选中 New Branch,如下图所示:

add_branch_feature-1

在弹出的对话框中我们输入 feature-1,点击OK,这样我们不仅新建了 feature-1 分支,并且正处于该分支中,接下来按照同样的方法创建dev分支,如果不出意外的话,我们现在应该是处于dev分支上,但是因为我们现在要开发功能1,所以必须转换到feature-1分支上,按照下图的操作,我们能够回到feature-1分支上。

接下来打开Log,我们应该能够看到如下的情景:

可以看到我们现在有三个分支:master、dev、feature-1,但是AS提示我们应该有四条分支,其实HEAD就是当前活跃分支的游标。形象的记忆就是:你现在在哪儿,HEAD 就指向哪儿,所以 Git 才知道你在那儿!不过 HEAD 并非只能指向分支的最顶端,实际上它可以指向任何一个节点,它就是 Git 内部用来追踪当前位置的标记。我们可以使用下面的图来演示当前分支的情况:

完成功能1

好了,功能1 编写完成,那么就提交吧!老方法:Ctrl+K 进行提交,按照下图填写提交信息,每一次的提交信息最好能够详细并且格式规范,这样以后再查看Log的时候就会比较方便。

点击Commit按钮提交完毕之后,可以看到现在的log图变成了下图:

我们可以打开Log图的右侧,他列出了目前正在被Git跟踪的所有文件,我们选中MainActivity.java,点击上边的第二个按钮Show Diff(显示差异):

在弹出的界面中可以显示该文件的 当前版本 和 master分支 中的该文件的差异,我们可以使用Esc快捷键退出该界面,如下图所示:

将feature-1分支合并到dev分支上

如下图所示,选中dev分支并选择checkout:

你会发现现在代码回到了最开始的状态,现在选中 feature-1 分支并选中 merge,准备将 feature-1 分支合并到 dev 分支上:

再来重新看一下Log图,他长下面这样,可以看到现在feature-1分支已经与dev分支合并,并且现在他们是处于同一状态的:

最后的最后,我们需要删除已经完成任务的feature-1分支,以免分支过多管理混乱。

重点来了

首先我们继续增加 feature-2 与 feature-3(跟 feature-1 一样,这里就不赘述)。但是老板说了,新开发的功能3不喜欢,需要删除了功能3,咋办呢?

这里就需要讲到Git的回退了,在 Android Studi o中提供了两种回退的方式:Git revert 以及 Git reset。

Git revert

Git revert 可以将版本回退到上一步,但是会新增一个提交,他的流程就像下面这幅图一样:

1. 首先打开Log,找到功能3的提交,右键选择复制哈希码(Copy Revision Number),如下图所示:

2.打开Android Studio的终端Terminal,他就在Version Control的旁边,之后输入以下命令按回车键:

//很复杂的数字字母就是我们刚才复制的哈希码

git revert 9c834d8c66598fb132a0cc8e4c1f8c341d058f3e

如下图所示:

3.之后终端会列出此次提交的具体信息,如果确认要回退,请输入:q保存此次操作并且退出会话

现在你可以看到,他确实增加了一次提交,并且回到了上一版的内容,Log应该是这样的:

Git reset

相比之下,Git reset 就要干脆的多,与 Git revert 的功能一样,它也可以将代码恢复到上一个版本,但是不会新增一次提交,他的流程如下:

因为我们需要删除 功能3,并且让Log看起来并没有 revert 的这一次提交,所以我们应该在dev分支上后退两步,确实是这样的对吧!

1.点击菜单栏上的 VCS-->Git-->Reset HEAD,打开对话框,在 To Commit 文本框中输入 HEAD~2,就像下图这样:

2.点击Reset按钮之后,你可以发现Log变了,变回原来那个熟悉的画面了:

master分支被修改

突然你发现你的同事在 master 分支上提交了两次,分别是增加了 功能1 和 功能4,但是其中的 功能1 很显然 HelloWorld 被写成了 WorldHello,例如这样的:

提交更改,之后Log应该是这样的:

我们依旧用演示图表示当前分支的发展情况:

Rebase

老板说了,master 分支只要 功能4 不需要 功能1,而 dev 分支上的 功能1、2 全部都要合并到 master 分支上。那么这个时候我们就可以使用 rebase 了。

git rebase 用于把一个分支的修改合并到当前分支。现在我们切换到 master 分支,将 dev 上的做修改加入到 master 中,所以我们选择 rebase,在Android Studio中提供了功能十分强大的rebase。

1.点击菜单栏上的VCS–>Git–>Rebase,如下图所示:

2.在弹出的对话框中,我们在Onto的下拉栏中选中dev分支,表示我们需要将master分支rebase到该分支下

3.点击Rebase之后,你会发现Android Studio弹出对话框,显示master分支的两次提交,需要我们做出选择,如下图所示:

4.因为我们不需要master分支上的 功能1 但是需要 功能4,所以在 功能1 的提交上我们选择 skip(跳过这个提交),在 提交4 上选择 pick(挑选此次这个提交),点击 Start Rebasing,我们可以看到又有对话框弹出,此次是让我们对每个文件进行挑选,如下图所示:

5.对于每一个文件,你可以选择接受你的那一部分,或者接受另一只分支上的内容,又或者你可以点击Merge对文件进行筛选。我们点击Merge按钮,可以看到有三个文件呈现在屏幕上。其中中间的文件是最后的结果,左边的为当前分支master分支,右边的为dev分支,你还可以发现在修改过的每一行中都存在一个X >>符号,点击X表示不需要这一行的修改,点击>>表示接受这一行的修改,我们甚至还可以像在编辑器中那样复制、粘贴、编辑内容,我们最终作出的选择如下图所示,之后可以点击Apply进行保存,如果你不想保存,那就点击Abort终止此次修改:

6.对于剩下的两个文件也做相同的处理,之后我们可以看到master分支已经有了dev分支的功能1和功能2和自身的功能4,并且去掉了自己之前的功能1,可以看一下Log,如下所示:

我们依旧使用演示图来表示最后的分支情况:

推送到远程仓库

推送很简单,你可以导航到菜单栏 VCS-->Import Into Version Control -->Share Project on Github,如下图所示:

在弹出的对话框中填写远程仓库的名称,点击Share:

之后你就可以在你的Github上面看到这一次的推送了。

本地修改同步到远程仓库

现在我需要在工程中加入一些文件,例如说我新建了一个 screenshots 文件夹,并在其中添加了这篇文章需要用到的截图,那么如何将这些文件一起同步到远程仓库呢?其实很简单。

1.使用快捷键Alt+9或者点击工具按钮打开 Version Control,右键Unversioned Files,选择Git-->Add,将所有文件加入Git中,如下图:

2.右键Default,选择Commit所有的文件之后填写提交信息,如下图:

3.使用快捷键 Ctrl+Shift+K 或者右键工程根目录,选择push项目,如下图所示:

4.在弹出的对话框中点击Push按钮,就可以将所做的修改同步到远程仓库了,如下图:

5.对于修改过的文件想要同步到远程仓库,按照同样的步骤就行了,这里不再赘述了。

后记

这篇文章有点长,图也很多,我也写了很久,有的时候思路不清晰也混了(尴尬脸),所以难免会有错误,还请大家批评指正,大家互相学习,希望你能够学到更多Android Studio的知识。

项目地址:

https://github.com/Wensibob/MyGit


文章原创作者GuoLin 书籍推荐

郭林大神原创android 书籍:《第一行代码 android》

淘宝链接:

https://s.click.taobao.com/t?e=m%3D2%26s%3DgKUfuKdAZKocQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67p2n%2BQBNMyE6Rku8%2Bpj6eJall3bs%2B3NRhNHnsKI%2BqxhyM0iVZhTFBom4YIorMPnmg8G0g2OJi%2FzmXHfenomYtn5EW9vzeG8LzfPUwktUBEmkxg5p7bh%2BFbQ%3D&pvid=10_106.6.161.154_3367_1490163222155

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容