当前位置: 代码迷 >> Android >> Android进阶中级课程——1.1 Git的本地使用详解
  详细解决方案

Android进阶中级课程——1.1 Git的本地使用详解

热度:126   发布时间:2016-04-24 11:52:30.0
Android进阶中级教程——1.1 Git的本地使用详解

Android进阶中级教程——1.1 Git的本地使用详解

标签(空格分隔): Android进阶


1.引言

在之前的Android基础入门系列我们就讲解过Git的简单使用了,进阶系列我们
系统地对Git进行讲解,基本命令的使用;工作区,暂存区,历史仓库,远程仓库的概念,
团队协作中的分支管理,Android Studio中使用Git等;Git是一个快速的分布式的版本
控制系统,和其他的版本控制系统的差别在于Git直接记录快照,而不是差异比较!
差异比较的版本控制系统只关心文件内容的具体差异,然后每次记录哪些文件做了更新,
以及更新了哪些行的内容!当我们想切换到以前某个版本的时候,我们需要merge,而
Git在每次commit时,都会完整的存储当前版本所有修改的文件,而不是只存储diff,
所以想切换都某个历史版本只需简单的reset即可!


2.Git的几个部分

在开始使用Git之前我们先要知道Git的四个部分:

下面就来分别介绍这四个部分:

工作区就不用说了,我们当前的工作空间;而另外三个部分,我们举个形象点的例子来帮助理解吧:
大家都应该网购过吧,比如逛某猫超市的时候,看到心仪的商品,我们可以把商品加入到
购物车(暂存区),我们可能会频繁地添加商品(add)又或者移除商品(checkout),
这个过程我们可以随便嗨,反正还不用给钱;当我们挑得七七八八,接着我们就要提交我们的订单了,
点击提交订单(commit),会生成一个商品订单列表(快照),我们还可以在提交的时候加点
备注信息,比如要什么颜色之类的(commit -m “颜色”),此时订单还没有付款(push),我们
可以在自己账户的未处理订单列表(本地仓库)中找到我们的这个订单(快照),也可以看到自己
以前的一些订单记录;好吧,接着我们选择这个还没付款的订单,然后进行付款(push),付款
完成后,商家(远程仓库)就会收到你的这个订单,然后发货…

相信有了这个图以及网购的形象化例子,你应该能理解Git的四个部分的概念了,而Git的操作
大部分都是在本地执行的,下面是Git的下载安装


3.Git的下载安装

  • Windows系统:
    到Git For Windows或者git-for-windows.github.io上下载,然后是傻瓜式的下一步

  • Linux系统
    到Download for Linux and Unix下载,假如你是和我一样的Ubuntu的话直接在Terminal键入:
    sudo apt-get install git

  • Mac系统
    到Installing on Mac下载

安装完Git后,我们就可以打开Git命令行:

Windows在任意位置右键,点击Git Bash打开Git命令行
Ubuntu下直接打开Terminal就可以,Terminal的快捷键是:ctrl + alt + t

这里说下为什么要使用命令行:
逼格高,命令熟悉后可以没事无情秀一波;当然,其实更多的减少跨平台后使用Git的成本,
比如你熟悉了Win下某个Git的GUI工具,但是加入某一天你要迁移到Linux上,全是命令
行,你怎么玩…或者需要换另一个新的GUI工具,你又需要花时间去熟悉这个工具的使用。
看自己吧,也没一定要命令行,你也可以用图形化工具,后面也会讲下在Android Studio上使用Git!
PS:本来是打算在Ubuntu下完成命令演示的,后来发现截图后还要自己处理截图,因为
Ubuntu只能全屏截图或者窗口截图,所以,直接在win上进行演示了~


4.设置您的身份信息

安装完Git要做的第一件事就是配置你的身份信息,团队开发,万一哪里错问题了,谁背锅?是把!
键入下述指令:

git config --global user.name "coder-pig"git config --global user.email "779878443@qq.com"

配置完后,把”“部分信息去掉,输多一次上面的指令,可以看到是否配置成功

也可以键入下述指令来查看所有的git设置:

git config --list


4.获取帮助

和其他的命令行一样,git同样带有help指令,当遇到没见过或者忘记了的命令的时候,可以键入:

git help init

把init改成你要查询的那个指令即可!比如git help add

win下会打开一个Git的Manual(手册)的页面,可以在之类查看指令的一些用法
Ubuntu下则会直接在命令行输出:

你也可以到Git官方手册查找对应指令!


5.创建本地的代码仓库

你可以直接键入下述指令创建一个新的带Git仓库的项目:

git init GitForTest

把GitForTest改成你想创建的工程名即可!接着我们可以来到新创建的工程的目录下,这里需要
修改下让隐藏文件可见,就可以看到.git的文件夹里,里面东东就是我们git仓库的东东了,切记
别随意去改或者删除里面的东西!(你也可以键入:ls -ah来查看隐藏文件)

当然假如你已经有项目了,想在之前项目的基础上添加Git仓库,那么通过命令行或者git bash来到当前工程的文件夹目录下,键入下述指令即可为你的项目添加本地Git仓库:

git init

6.将文件放入暂存区

我们可以把新建或者修改过后的文件,我们可以通过git add指令添加到暂存区
你可以用下面的指令,一个个文件的添加:

git add README.md

要添加的文件很多,觉得添加起来很麻烦,你可以一次性添加多个:
这里说下一个名词:tracked代表已经加入Git仓库,untracked代表还未加入Git仓库!

1)将所有tracked文件中被修改或已删除的文件信息添加到Git暂存区,不会处理untracked的文件!

git add -u

2)将所有tracked文件中被修改或已删除的文件信息添加到Git仓库,会把理untracked的文件信息
也加入Git暂存区

git add -A

3)把当前工作区的所有文件全加入到Git暂存区

git add .

除了上面两种外,git其实还提供了交互界模式,我们可以键入:

git add -i

上图的流程是这样的

1.我现在GitForTest的文件夹里创建了两个文件
2.键入git add -i,进入后,键入4,选择添加untracked的文件
3.他给我们列出了untracked的文件,然后我们根据序号来添加文件
4.输入?会弹出相关提示,然后直接回车,结束选择!
5.然后再次输入git add -i,输入4,可以看到已不存在untacked的文件了!

当然还有其他几个指令,限于篇幅,有兴趣的可以自己研究研究!


7.将暂存区的内容提交到本地仓库(History)

我们可以通过git commit -m “xxx”指令将暂存区的内容提交到仓库中

git commit -m "修改了xxx"

后面的-m是对本次提交的说明,”xxx”是说明内容,不该偷懒省去,假如你这里不
输入,-m “xxx” 的话,也会让你进入Vim来编写声明信息的~所以建议还是在这里进行提交内容的说明吧!

另外,我们的项目可能存在一些几百年不变的或者自动生成的文件,比如lib,gen,bin文件夹等,我们没必要
每次都把这些都commit,我们可以在.git同级的目录下创建一个名为.gitignore的文件,然后编辑内容,把
不需要提交的文件写上,那么commit的时候就会自动忽略这些文件的了~:


8.查看当前工作区与暂存区的状态

我们可以用git status指令来查看工作区与暂存区的当前情况,比如工作区有什么文件和暂存区的文件
对比,发生了改变,要不要add下?又比如暂存区里有东西add了,但是还没提交等等,直接键入下述指令即可:

git status

比如我这里修改了下README.md文件~
只是改了没add:

add文件后:

commit提交暂存区内容

恩,很简单,另外,你还可以用下述指令,让结果以简短的形式输出~

git status -s

9.查看工作区与暂存区的差异

上面我们可以通过git status获取当前工作区与缓存区的状态,仅仅是状态,
假如我们需要查看发生改变的内容,那么你需要键入下述指令:

git diff

这样就可以看到当前的工作区与暂存区中对比,做了哪些修改!
PS:上面是我们在README.md文件里添加了一条语句,然后再输入git diff!


10.查看提交更改的记录

还记得上面的网购的例子吗,我们可以在我的订单中找到自己的订单记录,
同样,在git中,我们也可以查看所有commit的记录!可以键入下述指令:

git log

当然,你也可以调用下述指令获得更精简的结果

git log --oneline

如果上面还满足不了你的话,可以参考:Viewing the Commit History
对log进行定制,比如:


11.删除文件 + 文件恢复(未add到暂存区)

我们可以直接右键删除一个文件,又或者进入命令行,键入rm xxx.xxx将文件删除,但是删除的仅仅是
当前工作区里的文件,暂存区里还是存在着该文件的,所以此时你键入git status的话,会发现:

git告诉你工作区的文件被删除了,然后你有两种选择:
1)把暂存区里的文件也删了,那么键入:

git rm "xxx.xxx"git commit -m "xxx"

2)误删了,将暂存区的文件恢复到工作区,那么可以键入:

git checkout -- xxx.xxx

duang!被删除的文件又回来了~
当然,上面的checkout不止适用于误删文件,当你把一个文件改得面目全非的时候,
你突然后悔了,但是你已经ctrl+s保存了很多次代码了,你可以用用上述指令回到
这个文件的最初样子!(前提是你还没add!)


12.文件恢复(已add到暂存区,未commit)

假如你已经把文件用git add到了暂存区,那么此时你直接用checkout文件是没有作用的!
我们需要通过git reset指令来废除此次修改记录(版本回退),让当前文件回到上一次提交时的状态!
键入:

git reset HEAD xxx.xxx

此时再调用:

git checkout -- xxx.xxx

文件即可恢复原样!


13.文件恢复(已commit)——版本回退

假如,我们的文件修改已经commit了,而你无端端的又后悔了,想恢复成上一次commit时的文件,
又或者上上次的,这时候你可能开始方了,不过Git为我们提供了时光机(版本回退),我们可以
通过下述指令回退到上一个版本:

git reset HEAD^

恩,我们键入git log后可以看到版本已经回退到上一个版本了!
如果是上上个版本,你只需加多^,再上一个版本继续加^,如此类推!
当然,除了上面的形式,你还可以根据版本号来回退,比如这里我退到第一个版本:

git reset --hard 8c3f91f

嘿嘿,无压力,你突然又后悔了,想回到新的那个版本,嗯…好吧,同样是上面的指令:
不过版本号改成最新那次commit的版本号就可以了!

git reset --hard cf2d155

你可能会支支吾吾的过来对我说:”恩,那个我刚刚把命令行关了,那个最新的版本号找不着了,
git log也找不到那个最新的版本号,那我是不是不能回未来了?”幸运的是,Git时光机会记录
你输入的每一条指令,你只需键入下述指令:

git reflog

拿到版本号,git reset即可~


14.Git命令自动补全

输入Git命令的时候按两次Tab就可以了!


15.Git命令别名

如果想偷懒,想少敲几个字母,可以为命令设置别名,然后键入别名就调用对应指令,比如将status设置成st:


16.小结

本节给大家详解了Git的本地使用,大部分时间我们都是在本地上进行Git的一些操作,所以熟
悉这些命令很重要!当然这是需要一点点积累的,敲多了,敲起来就行云流水了!下节开始,我们
来学习远程仓库,分支管理,团队开发中的协作,等等~谢谢!


参考文献

  • Pro Git(官方)
  • Pro Git(oschina)
  相关解决方案