GIT使用方式
简介
Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等。顾名思义,版本控制系统主要就是控制、协调各个版本的文档内容的一致性,这些文档包括但不限于代码文件、图片文件等等。早期SVN占据了绝大部分市场,而后来随着Git的出现,越来越多的人选择将它作为版本控制工具,社区也越来越强大。相较于SVN,最核心的区别是Git是分布式的VCS,简而言之,每一个你pull下来的Git仓库都是主仓库的一个分布式版本,仓库的内容完全一样,而SVN则不然,它需要一个中央版本库来进行集中控制。采用分布式模式的好处便是你不再依赖于网络,当有更改需要提交的时候而你又无法连接网络时,你只需要把更改提交到本地的Git仓库,最后有网络的时候再把本地仓库和远程的主仓库进行同步即可。
工作原理
- Workspace:工作区
- Index:暂存区
- Repository:仓库区/本地仓库
- Remote:远程仓库
SVN与GIT区别
SVN
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了
GIT
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了
安装配置
安装
sudo apt-get install -y git # 安装
git version # 查看git版本
标识
- GIT基于分布式版本控制需要用户名与邮箱作为标识
- 通过设置标识标明本机器所有GIT仓库都会使用该标识
- 当然也可以针对特定的仓库设定单独的标识
git config --global user.name "SR" # 设置全局用户名标识
git config --global user.email "srcoder@163.com" # 设置全局邮箱标识
git config --list # 检查全局配置
GIT基本使用方式
创建版本库
什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”
mkdir Desktop/git_test # 创建git测试文件夹
git init # 初始化仓库
ls -al # 查看当前文件夹文件
文件提交
jason@jason:~/Desktop/git_test$ touch readme.txt # 创建测试文件
jason@jason:~/Desktop/git_test$ git add readme.txt # 添加暂存区域
jason@jason:~/Desktop/git_test$ git commit -m "提交readme.txt" # 进行提交 -m 后属于提交注释
jason@jason:~/Desktop/git_test$ git status # 查看当前状态
# 修改文件内容 查看文件状态
jason@jason:~/Desktop/git_test$ echo 1111 > readme.txt # 修改文件内容
jason@jason:~/Desktop/git_test$ git status # 查看修改之后的状态
# 查看被修改的内容
jason@jason:~/Desktop/git_test$ git diff readme.txt # 查看修改内容
# 提交修改之后的内容
jason@jason:~/Desktop/git_test$ git add readme.txt
jason@jason:~/Desktop/git_test$ git status
jason@jason:~/Desktop/git_test$ git commit -m "添加111到readme.txt"
jason@jason:~/Desktop/git_test$ git status
版本回退
# 查看历史操作记录
jason@jason:~/Desktop/git_test$ git log
jason@jason:~/Desktop/git_test$ git log --pretty=oneline # 若下图显示过多可以使用此命令
# 版本回退
jason@jason:~/Desktop/git_test$ touch test.txt
jason@jason:~/Desktop/git_test$ echo "111" > test.txt # 添加测试数据
jason@jason:~/Desktop/git_test$ git add test.txt
jason@jason:~/Desktop/git_test$ git commit -m "添加测试文件1111"
jason@jason:~/Desktop/git_test$ git status
jason@jason:~/Desktop/git_test$ git reset --hard HEAD^ # 版本回退
jason@jason:~/Desktop/git_test$ cat test.txt
- 如果要回到上上版本则git reset --hard HEAD^^依次类推
- 如果要回退到前100个版本上述方法肯定不方便git reset --hard HEAD~100(直接跟回退的版本)
# 回退到上述111所在的版本
jason@jason:~/Desktop/git_test$ git reflog # 查看删除的版本号
jason@jason:~/Desktop/git_test$ git reset --hard ceb6920 # --hard后面加上想要恢复的版本号
jason@jason:~/Desktop/git_test$ cat test.txt
工作区与暂存区
工作区
- 就是你在电脑上看到的目录,比如目录下git_test里的文件
- 以后在git_test文件夹下创建的文件以及文件夹都属于工作区
- git_test下.git文件不属于工作区此时属于版本库
版本库
- Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支
master
,以及指向master
的一个指针叫HEAD
。 - git add把文件添加进去,实际上就是把文件修改添加到暂存区;
- git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
- 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,现在,git commit就是往master分支上提交更改。
jason@jason:~/Desktop/git_test$ echo 222 >> test.txt # 写入新的数据
jason@jason:~/Desktop/git_test$ touch readme1.txt # 添加新的文件
jason@jason:~/Desktop/git_test$ git status # 查看当前状态
# 将文件加入暂存区域
jason@jason:~/Desktop/git_test$ git add test.txt readme1.txt # 加入暂存区
jason@jason:~/Desktop/git_test$ git status
# 一次性提交文件
jason@jason:~/Desktop/git_test$ git commit -m "提交文件"
jason@jason:~/Desktop/git_test$ git status
GIT撤销修改和删除
撤销修改
未放入暂存区
jason@jason:~/Desktop/git_test$ echo 333 >> test.txt # 添加测试数据
jason@jason:~/Desktop/git_test$ cat test.txt
jason@jason:~/Desktop/git_test$ git checkout -- test.txt # 撤销修改
jason@jason:~/Desktop/git_test$ cat test.txt
放入暂存区
jason@jason:~/Desktop/git_test$ echo 444 >> test.txt
jason@jason:~/Desktop/git_test$ git add test.txt # 加入暂存区
jason@jason:~/Desktop/git_test$ echo 555 >> test.txt # 添加测试数据
jason@jason:~/Desktop/git_test$ git checkout -- test.txt # 撤销数据 若无--则切换分支
jason@jason:~/Desktop/git_test$ cat test.txt
# 如果将上述已经加入暂存区的取消
jason@jason:~/Desktop/git_test$ git reset HEAD # 清空暂存区
jason@jason:~/Desktop/git_test$ git checkout -- test.txt # 撤销
jason@jason:~/Desktop/git_test$ cat test.txt
删除版本
jason@jason:~/Desktop/git_test$ touch b.txt
jason@jason:~/Desktop/git_test$ git add b.txt
jason@jason:~/Desktop/git_test$ git commit -m "add b.txt"
jason@jason:~/Desktop/git_test$ rm -fr b.txt # 删除b.txt文件
jason@jason:~/Desktop/git_test$ git status
# 恢复上述删除的状态
jason@jason:~/Desktop/git_test$ git checkout -- b.txt
jason@jason:~/Desktop/git_test$ ls # 查看文件
jason@jason:~/Desktop/git_test$ rm -fr b.txt
jason@jason:~/Desktop/git_test$ git add b.txt
jason@jason:~/Desktop/git_test$ git commit -m "delete b.txt"
jason@jason:~/Desktop/git_test$ git status