GIT安装
在linux centos7环境下安装git使用的命令
sudo yum -y install git
检查是否安装成功的命令
git --version
创建GIT本地仓库
将普通仓库变成git仓库
git仓库是进行版本控制的一个文件目录
版本控制可以方便我们进行版本回退,切换到指定版本上
咱们创建的仓库命名为gitcode
mkdir gitcode
创建一个git仓库使用的命令是
git init
创建完git仓库,目录下多出一个.git隐藏目录(使用ls命令不能查看到隐藏目录),.git目录是git用来跟踪管理仓库的,不要手动修改这个目录下的文件,否则就会破会git仓库。
配置GIT
安装完GIT后需要设置你的用户名称和**email地址,**配置命令如下
git config --global user.name "you name"
git config --global user.email "you email"
其中 --global是将所有git仓库都使用这个配置,如果只想要当前仓库中使用该配置就不需要添加 --global。配置完成可以使用git config -l查看当前配置情况
如果想要删除对应的配置可以使用如下命令
git config [--global] --unset user.name
git config [--global] --unset user.email
认识工作区,版本库,暂存区
- 工作区:电脑中能看到的目录。
- 版本库 :也叫仓库(repository), 工作区中的隐藏目录
.git
,它不算工作区,而是GIT的版本库。在这个版本库中的所有文件都可以被Git管理起来,每个文件的CRUD,Git都能追踪,以便任何时刻都可以追踪历史,或者在将来某个时刻进行"还原"。 - 暂存区 :英文是index或者stage,一般放在
.git
目录的index文件中
下图是工作区,版本库,暂存区的关系图
- 图中左侧是工作区,右侧为版本库,GIT的版本库中存在很多东西,其中最重要的就是暂存区(index)。
- 在创建GIT版本库时,Git会自动创建一个唯一的master分支,以及指向master分支的指针HEAD,指向该分支的最后一次提交。
- 当对工作区CRUD的文件使用
git add
命令时,暂存区的目录树会被更新。 - 当执行提交操作
git commit
时,master分支会做相应的更新,可以简单理解为暂存区的目录树才会被真正写到版本库中。
总结:通过新建或粘贴进目录的文件,并不能真正向仓库中新增文件,而只是在工作区新增了文件。必须通过git add和git commit命令才能将文件添加到仓库中,进行管理。
添加文件
在包含 .git 的目录下新建一个file1文件,使用git add
命令将文件添加到暂存区。
- 添加一个或多个文件到暂存区:
git add [file1] [file2]...
- 添加指定目录到暂存区,包括子目录:
git add [dir]
- 添加当前目录下的所有改动过的文件到暂存区:
git add .
再使用git commit
命令将暂存区内容添加到本地仓库中
- 提交暂存区全部内容到本地仓库中:
git commit -m 'message'
- 提交暂存区中指定文件到本地仓库中:
git commit [file1] [file2]... -m 'message'
git commit -m
后面要跟上本次提交的描述(message),这部分内容绝对不能省略,用来记录你的提交细节
git commit
执行成功后会告诉我们,1个文件改动,插入1行内容。
我们还可以多次add不同文件,而只commit一次便可以提交所有文件,因为需要提交的文件都被add到暂存区中,然后一次性commit暂存区的所有修改
我们可以使用git log
命令,来查看历史提交记录
该命令显示从最近到最远的提交日志,红框框中的内容就是咱们commit时的日志信息。
如果嫌弃输出的信息太多了,看的眼花缭乱,可以加上--pretty=oneline
参数
commit id
:就是版本号,GIT依靠commit id进行版本控制
查看本地git仓库
使用tree .git/
命令,可以查看 .git的目录结构
index
就是咱们的暂存区,add后的内容添加到这里HEAD
默认指向master分支的指针
让我们看一下HEAD的内容
再让我看一下refs/heads/master的内容
这一串数字就是当前最新的commit id
HEAD指向master分支,master分支指向最新的一次提交
objects
为Git的对象库,里面包含了创建的各种版本库对象及内容。当执行git add
命令时,暂存区的目录树被更新,同时工作区新增或修改的文件内容被写入对象库中的一个新的对象中。
通过cat
命令是无法直接查看object对象中的内容的,因为该类文件是经过sha
安全哈希算法加密过的文件。我们可以通过git cat-file -p
命令查看版本库对象的内容。
tree
在git中,每个版本(commit)都有唯一对应的sha-1值,这个值可用来唯一的标识这个版本。每个版本包含一个指向它所包含的文件快照的指针,这个指针就是tree。tree包含了该版本的所有文件和子目录的信息,我们可以再次使用git cat-file -p
命令查看
查看file1中的内容
这正是咱们在file1中写下的内容
parent
表示上一次提交的版本号
总结:在本地的git仓库中,有几个目录/文件很特殊
index:暂存区,git add后会更新该内容
HEAD:默认指向master分支的一个指针
refs/heads/master:文件里保存当前master分支最新的commit id
objects: 包含了创建的各种版本库对象及内容,可以简单理解为存放了git的所有更改
修改文件
GIT比其他版本控制系统设计得优秀,因为GIT跟踪管理的是修改,而非文件 。比如你新增一行,这是一个修改,删除一行,也是一个修改,更改某些字符,也是一个修改,新增一个新文件,也算一个修改。
让咱们将file1文件进行一次修改
此时,仓库中的file1和工作区的file1是不同的。咱们可以通过git status
命令查看在你上次提交后是否有对文件进行再次修改。
上面的结果告诉咱们,file1被修改过,但还没完成添加和提交操作。目前,我们只知道file1文件被修改过,并不知道哪个位置被修改了。GIT为我们提供了git diff <file>
查看哪些位置发生了修改
git diff <file>
命令用来显示暂存区和工作区文件的差异,也可以使用git diff HEAD -- <file>
命令查看版本库和工作区的区别。
知道了对file1做了哪些修改后,再把它提交到本地仓库就方向的多了。
git add
之后,就没有提交我们"修改尚未加入提交(使用 "git add" 和/或 "git commit -a")"的消息了。接下来使用git commit
即可