Git
常见版本控制器
集中式版本控制器
- CSV/SVN
- 速度慢,必须联⽹
- 只有⼀个中央数据仓库,如果中央数据仓库挂了或者⽆法访问,所有的使⽤者⽆法使⽤SVN,⽆法进⾏提交或备份操作
分布式版本控制器
- Git
- 无中央服务器,每个人的电脑都是一个完整的版本库
- 安全性能更高
- 通常有一台充当“中央服务器”的电脑,仅仅作为方便“交换”大家的修改
安装使用
- yum安装
1 | [root@node1 ~]# yum install git ‐y |
- 配置git⽤户、邮箱
1 | git config |
- 创建并初始化版本库
1 | # 在当前⽬录新建⼀个Git代码库 |
概念介绍

工作区
- 当前所在目录就是工作区
暂存区
.git不算⼯作区,只是git的版本库
- 版本库中只有暂存区和⾃动创建的master分⽀及指向master的⼀个指针HEAD
- git跟踪的是每次修改⽽不是⽂件,如果不将修改添加到暂存区是⽆法进⾏提交的
.git隐藏⽬录中⽂件介绍
1
2
3
4
5
6
7
8
9branches # 分⽀⽬录
config # 定义项⽬特有的配置选项
description # 仅供git web程序使⽤
HEAD # 指示当前的分⽀
hooks # 包含git钩⼦⽂件
info # 包含⼀个全局排除⽂件
objects # 本地仓库,存放所有的数据内容,有info和pack两个⽂件夹
refs # 存放指向数据(分⽀)的提交对象的指针3
index # 保存暂存信息,在执⾏git init的时候,这个⽂件还没有远程仓库
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。有一台机器有一个原始版本库,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分
常规使用
⼀般来说,⽇常使⽤只需要记住下图6个命令。但是熟练使⽤,恐怕要记住60-100个命令。

创建并初始化版本库
1
2
3
4[root@node1 ~]# mkdir firstgit && cd firstgit/ && git init && ls ‐
ah
Initialized empty Git repository in /root/firstgit/.git/
. .. .git把文件添加到仓库中
1
2
3
4
5
6[root@node1 firstgit]# echo "hello world" > readme.txt
[root@node1 firstgit]# git add readme.txt # 添加到仓库中
[root@node1 firstgit]# git commit ‐m "write a readme.txt file" #提交并通过‐m参数说明
[master (root‐commit) e380d2c] write a readme.txt file
1 file changed, 1 insertion(+)
create mode 100644 readme.txt修改文件内容,查询状态并提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32[root@node1 firstgit]# echo "hello eagleslab" > readme.txt
[root@node1 firstgit]# git status # 查询当前git仓库状态,readme.txt 需要添加和提交
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout ‐‐ <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
no changes added to commit (use "git add" and/or "git commit ‐a")
[root@node1 firstgit]# git diff readme.txt # 变化的内容
diff ‐‐git a/readme.txt b/readme.txt
index aa982b7..8d0e700 100644
‐‐‐ a/readme.txt
+++ b/readme.txt
@@ ‐1 +1 @@
‐hello world\n hello git
+hello eagleslab
[root@node1 firstgit]# git add readme.txt
[root@node1 firstgit]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: readme.txt
#
[root@node1 firstgit]# git commit ‐m "change messages"
[master 7b92afb] change messages
1 file changed, 1 insertion(+), 1 deletion(‐)
[root@node1 firstgit]# git status
# On branch master
nothing to commit, working directory clean查询历史记录并退回
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28[root@node1 firstgit]# git log5
commit 3efa7f0fc058f00b0a98171fb77b44ab31481c87 # 版本ID
Author: Cokeku <1154283293@qq.com>
Date: Mon Mar 18 22:42:38 2019 ‐0400
add zj
commit 7b92afbb9f118f7ae10c49abc3114e4ee91ed26a
Author: Cokeku <1154283293@qq.com>
Date: Mon Mar 18 22:37:05 2019 ‐0400
change messages
commit e380d2cc936e01e17065408000c42c21f114321a
Author: Cokeku <1154283293@qq.com>
Date: Mon Mar 18 22:31:25 2019 ‐0400
write a readme.txt file
[root@node1 firstgit]# git reset ‐‐hard e380d2cc936e01e17065408000c42c21f114321a # 退回指定版本
HEAD is now at e380d2c write a readme.txt file
[root@node1 firstgit]# cat readme.txt
hello world
[root@node1 firstgit]# git reset ‐‐hard 3efa7f0fc058f00b0a98171fb77b44ab31481c87
HEAD is now at 3efa7f0 add zj
[root@node1 firstgit]# cat readme.txt
hello eagleslab zhengjiang!
记录每⼀次的命令:
[root@node1 firstgit]# git reflog
3efa7f0 HEAD@{0}: reset: moving to 3efa7f0fc058f00b0a98171fb77b44ab31481c87
e380d2c HEAD@{1}: reset: moving to e380d2cc936e01e17065408000c42c21f114321a
3efa7f0 HEAD@{2}: commit: add zj
7b92afb HEAD@{3}: commit: change messages
e380d2c HEAD@{4}: commit (initial): write a readme.txt file命令清单
配置
1 | # 显示当前的Git配置6 |
增加/删除文件
1 | # 添加指定⽂件到暂存区 |
代码提交
1 | # 提交暂存区到仓库区 |
分支

1 | # 列出所有本地分⽀ |
标签
- 标签也是指向了⼀次commit提交,是⼀个⾥程碑式的标签,回滚打标签直接加标签号,不需要加唯⼀
字符串。
1 | # 给当前状态打标签 |
查看信息
1 | # 显示有变更的⽂件 |
远程同步
1 | # 下载远程仓库的所有变动 |
撤销
1 | # 恢复暂存区的指定⽂件到⼯作区 |
其他
1 | git init # 初始化本地git仓库(创建新仓库) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Kinmfer's Blogs!
评论
ValineLivere


