linux-git-02 git版本控制系统
集中式vs分布式
- 集中式CVS、SVN
- 速度慢,必须联网,开源精神不符
- 版本库集中放在中央服务器,工作时,获取最新版本,工作完成后,再推送给中央服务器!
- 分布式
- 无中央服务器,每个人的电脑都是一个完整的版本库
- 安全性能更高
- 通常有一台充当“中央服务器”的电脑,仅仅作为方便“交换”大家的修改
安装使用
Yum安装:
1 | [root@localhost ~]# yum install git -y |
为node1上所有的git仓库设置用户名和Email
1 | [root@node1 ~]# git config --global user.name "Your Name" |
创建并初始化版本库
1 | [root@localhost ~]# mkdir firstgit |
所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
常规操作
1.把文件添加到仓库中
1 | [root@localhost firstgit]# echo "hello world" > readme.txt |
2.修改文件内容,查询内容和状态并提交
1 | [root@localhost firstgit]# echo "hello eagleslab" > readme.txt |
3.查询历史记录并版本退回
1 | [root@node1 firstgit]# git log |
4.回滚失误怎么办?记录每一次的命令:
1 | [root@localhost firstgit]# git reflog |
控制版本历史记录:因为git内部有个Head指针指向当前的版本,如果需要退回版本,只需要将Head指针指向相对应的版本号id,并且更新工作区文件。版本号不用写全,复制粘贴一部分即可。
工作区和暂存区
- 工作区:当前所在的firstgit目录就是一个工作区
- .git不算工作区,只是Git的版本库
- 版本库中有暂存区和自动创建的master分支及指向master的一个指针HEAD
git add将文件放到缓存区(暂存区)中,git commit将缓存区内的文件提交到仓库中,提交到仓库中之后我们用git status才能看到working directory clean工作区域变空,我们的仓库的内容才是最新的,所以每次工作对仓库内容进行更改之后,要git add并且git commit。
- git add:将修改后文件添加到暂存区
- git commit:将暂存区的所有文件提交到master分支上
- git跟踪的是每次修改而不是文件,如果不将修改添加到暂存区是无法加入commit中的
- 撤销修改
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file
- 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset –hard 版本id,就回到了场景1,第二步按场景1操作
- 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,版本退回即可,不过前提是没有推送到远程库
- 删除文件
1 | [root@localhost firstgit]# git status |
实例测试
1 | [root@localhost firstgit]# echo "i am first" > 1.txt |
场景1:当你改乱了1.txt的内容,想直接丢弃工作区的修改时,用命令git checkout – file
1 | [root@localhost firstgit]# vim 1.txt |
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset –hard 版本id ,就回到了场景1;第二步按场景1操作。
1 | [root@localhost firstgit]# vim 1.txt |
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,版本退回即可,不过前提是没有推送到远程库
1 | [root@localhost firstgit]# vim 1.txt |