Git使用—第二讲
前面我们学习了Git最基本的用法,包括安装Git、创建代码仓库,以及提交本地代码。下面我们将学习Git更多的使用技巧,在开始之前,我们先给一个项目创建代码仓库,这里选择在ProviderTest项目中创建,打开Git Bash,进入到项目的根目录下,然后执行:git init命令,如下所示:

一、忽略文件
我们在提交项目的时候,不是所有的文件都需要加入到版本控制当中,Git提供了一种可配性很强的机制来允许用户将指定的文件或目录排除在版本控制之外,它会检查代码仓库的目录下是否存在一个名为:(.gitignore)的文件,如果存在的话,就去一行一行读取这个文件中的内容,并把每一行指定的文件或目录排除在版本控制之外。注意:(.gitignore)中指定的文件或目录是可以使用“*”通配符的。
Android Studio在创建项目的时候自动为我们创建了两个(.gitignore)文件,一个在根目录下,一个在app目录下,首先看一下根目录下的(.gitignore)文件(如图所示),通常这部分内容都是不用添加到版本控制当中的,简单看一下这个文件,除了:(*.iml)表示指定任意以(.iml)结尾的文件,其他都是指定的具体的文件名或者目录名,上面配置中的所有内容都不会被添加到版本控制当中,因为基本都是一些有IDE自动生成的配置。

再看一下app目录下的(.gitignore)文件:由于app目录下面基本都是我们编写的代码,因此默认情况下只有其中的build目录不会被添加到版本控制当中。

我们完全可以对以上两个文件进行任意的修改,来满足特定的需求,比如说,app下面的所有测试文件都只是给我自己使用的,我并不想把他们添加到版本控制中,那么就可以这样修改app/.gitignore文件中的内容:只需要添加两行配置,因为所有的测试文件都是放在这两个目录下的。

现在我们就可以提交代码了,先使用add命令将所有文件进行添加,再执行commit命令完成提交,如下所示:

二、查看修改的内容
在进行了第一次代码提交之后,我们后面还可能对项目不断地进行维护或添加新功能等,有可能到后面我们就忘记前面修改了什么东西了,这时候可以使用Git来查看自上次提交后文件修改的内容。
查看文件修改情况的方法非常简单,只需要使用status命令就可以了,在项目的根目录下输入命令:git status,然后Git会提示目前项目中没有可提交的文件,因为我们刚刚才提交过,现在对ProviderTest项目中的代码稍做一下改动,修改MainActivity中的代码如下:

这里我们仅仅在添加数据的时候,将书的价格改为了55.55,然后依次输入命令:git status ---> git diff

如果我们想要查看MainActivity.java这个文件的更改内容,可以使用如下命令:
git diff app/src/main/java/com/example/providertest/MainActivity.java
其中减号代表删除部分,加号代表添加的部分,从图中我们明显地看到价格修改成了55.55.
三、撤销未提交的修改
有时候我们的代码可能写得过于草率,以至于原本正常的功能,结果反倒被我们改出了问题,遇到这种情况,只要代码还未提交,所有修改的内容都是可以撤销的。比如在上一节中我们修改了MainActivity中一本书的价格,现在想要撤销这个修改,就可以使用checkout命令,用法如下:
git checkout app/src/main/java/com/workspace/hh/providertest/MainActivity.java
执行这个命令后,我们对MainActivity.java这个文件所做的一切修改就应该都被撤销了。重新运行:git status 命令检查一下,结果如图:可以看到,没有任何可提交的文件,说明撤销成功了。

不过这种撤销方式只适用于那些还没有执行过add命令的文件,如果某个文件已经被添加过了,这种方式就无法撤销其更改的内容。解决办法是:先对其取消添加,再撤回提交,取消添加使用的是:reset命令。用法如下:
git reset HEAD app/src/main/java/com/workspace/hh/providertest/MainActivity.java
然后再运行一遍:git status命令,你就会发现MainActivity.java这个文件重新变回了未添加状态,此时就可以使用checkout命令来将修改的内容进行撤销了。
四、查看提交记录
当一个项目开发了几个月之后,我们可能已经执行过上百次的提交操作,可能早就已经忘记了每次提交都修改了哪些内容,这个时候可以使用log命令来查看历史提交信息。用法如下:

输入:git log,我们看到,提交记录包括:提交id、提交人、提交日期、提交描述这4个信息。
Git使用—第二讲的更多相关文章
- GIT 学习第二天 (二)
工作区和暂存区 工作区: 就是你在电脑里能看到的目录,比如:webgit 文件夹 就是一个工作区 版本库: 工作区有一个隐藏目录 .git ,这个不算工作区,而是Git的版本库 Git的版本库里存了很 ...
- POI教程之第二讲:创建一个时间格式的单元格,处理不同内容格式的单元格,遍历工作簿的行和列并获取单元格内容,文本提取
第二讲 1.创建一个时间格式的单元格 Workbook wb=new HSSFWorkbook(); // 定义一个新的工作簿 Sheet sheet=wb.createSheet("第一个 ...
- Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable
原文:http://blog.csdn.net/abcjennifer/article/details/7700772 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
- 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的
[军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的 之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们, ...
- 《ArcGIS Engine+C#实例开发教程》第二讲 菜单的添加及其实现
原文:<ArcGIS Engine+C#实例开发教程>第二讲 菜单的添加及其实现 摘要:在上一讲中,我们实现了应用程序基本框架,其中有个小错误,在此先跟大家说明下.在“属性”选项卡中,我们 ...
- 基于微信公众平台的开发(清华大学第二讲)_Alien的笔记
基于微信公众平台的开发(清华大学第二讲)_Alien的笔记 基于微信公众平台的开发(清华大学第二讲)
- 32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数
32位汇编第二讲,编写窗口程序,加载资源,响应消息,以及调用C库函数 (如果想看所有代码,请下载课堂资料,里面有所有代码,这里会讲解怎么生成一个窗口程序) 一丶32位汇编编写Windows窗口程序 首 ...
- 常见注入手法第二讲,APC注入
常见注入手法第二讲,APC注入 转载注明出处 首先,我们要了解下什么是APC APC 是一个简称,具体名字叫做异步过程调用,我们看下MSDN中的解释,异步过程调用,属于是同步对象中的函数,所以去同步对 ...
- PE文件格式详解,第二讲,NT头文件格式,以及文件头格式
PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...
随机推荐
- 配置Tree Shaking来减少JavaScript的打包体积
译者按: 用Tree Shaking技术来减少JavaScript的Payload大小 原文: Reduce JavaScript Payloads with Tree Shaking 译者: Fun ...
- css3火焰文字样式代码
css样式: <style type="text/css"> body{background:#000;} *{margin:0;padding:0;transitio ...
- Python 函数的作用域
python中的作用域有4种: 名称 介绍 L local,局部作用域,函数中定义的变量: E enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的: B ...
- 原生JS强大DOM选择器querySelector与querySelectorAll
在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id ...
- 微信小程序踩过的一些坑
前言 迄今为止,正儿八经的上线了真正意义上的程序,但是这个小程序却着实不小. 之所以不小,是因为这个类似于社区的小程序,已经做了大部分都有的功能了 举例说明,具体的一些功能点: 1.帖子列表页面:会有 ...
- SoapUI 利用SoapUI进行简单的接口并发测试
利用SoapUI进行简单的接口并发测试 by:授客 QQ:1033553122 测试环境: SoapUI Pro 5.1.2 步骤如下 1. 把请求添加到测试套件 1.1. 途径1 1.新 ...
- LDA背景资料
[https://zhuanlan.zhihu.com/p/30226687] LDA模型的前世今生 在文本挖掘中,有一项重要的工作就是分析和挖掘出文本中隐含的结构信息,而不依赖任何提前标注的信息.L ...
- JMeter—断言(十一)
参考<全栈性能测试修炼宝典JMeter实战>第六章 JMeter 元件详解中第六节断言断言用来对服务器的响应数据做验证,常用的断言是响应断言,支持正则表达式. 一.BeanShell As ...
- JavaScript高级特性-实现继承的七种方式
声明和约定: 在C++和Java中,我们可以通过关键字class来声明一个类,在JavaScript中没有这个关键字,但我们知道可以通过new一个function创建对象,这个function类似C+ ...
- Arch Linux 更新源(以清华 arch 源为例)
Arch Linux 编辑/etc/pacman.d/mirrorlist,在文件最顶端添加: Server = https://mirrors.tuna.tsinghua.edu.cn/archl ...