Git简介
Git是一款分布式版本控制系统。
集中式版本控制系统与分布式版本控制系统的区别
集中式版本控制系统
- 版本库集中存放在中央服务器,干活的时候,先从中央服务器获取最小的版本,干完活再推送给中央服务器。
- 必须联网才能工作,安全性低,中央服务器坏了,所有代码都会丢失。
分布式版本控制系统
- 分布式版本控制系统没有"中央服务器",每个人的电脑都是一个完整的版本库,这样,工作的时候不需要联网,因为版本库就在自己的电脑上。
- 多人协作时,只需要把自己的修改推送给一个特殊的版本库,其它人再从这个版本库上获取,就可以互相看到对方的修改了。
- 安全性能高,任何一个版本库坏了都不要紧,因为每个人的电脑都是一个完整的版本库。
Git创建版本库
- 初始化一个Git版本库,使用git init 命令。
- 添加文件到git仓库,分两步
使用命令 git add <file> 可反复多次使用,添加多个文件
使用命令 git commit -m <message> 提交到本地版本库。
Git版本库管理
- 使用git status 命令随时掌握工作区的状态
- git status告诉我们哪些文件被修改过,用git diff可查看修改内容。
Git版本回退
- HEAD指向的版本就是当前的版本,因为Git允许在版本的历史之间穿梭,使用命令
git reset --hard commit_id //回退特定历史提交版本
git reset --hard HEAD^ //回退到上个提交版本
- 穿梭前,用git log可以查看提交历史,以确定要回退到哪个版本。
git log --pretty=online 去除过多的输出信息
- 要重新返回最新版本,用git reflog查看命令历史,以确定回到未来的哪个版本。
Git的工作区和暂存取
Git和其它版本控制系统的最大不同之处就是有暂存区的概念。
- 工作区:电脑能看到的某个目录,某一个文件夹
- 版本库:工作区里面的隐藏目录(.git)
版本库中最重要的三个东西,称为stage的暂存区,Git自动创建的第一分支Master,以及指向第一个master的指针(head)
Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
git add把所有要提交的修改放到暂存区,git commit 一次把暂存区的所有修改提交到分支。
Git管理修改
Git跟踪并管理的是修改,而不是文件
eg:假如有一个文件test.txt
- 第一次修改,在test.txt中添加一行数据。随后,git add test.txt
- 再次修改test.txt,随后,git commit -m “第二次修改”
最后会发现,对文件进行了两次修改,但第二次修改并没有提交,也就是说,git管理的修改,而不是文件本身。
如果第二次修改要提交,也需要先 git add 然后 git commit,或者先把第一次、第二次修改都git add,然后git commit一次提交两次修改。
每次修改,如果不用git add到暂存区,那就不会加入到commit中。
Git撤销修改
- 场景1,改乱工作区文件夹,想丢弃工作区修改。使用命令
git checkout fileName
- 场景2,改乱工作区,还添加到了暂存区,想丢弃修改。分两步操作,第一步用命令git reset HEAD 或 file,就回到了场景1,第二部按场景一操作。
git reset HEAD 或 <file>
git checkout fileName
- 场景3,提交了不合适的修改到版本库,想要撤销本次提交,参考版本回退。
git reset --hard commit_id //回退特定历史提交版本
git reset --hard HEAD^ //回退到上个提交版本
Git删除文件
- 直接在工作区删除该文件
- 若确实要从版本库中删除。使用命令git rm 删除掉,并git commit提交。
git rm test.txt
git commit -m "delete file"
- 删除错了,但版本库里面还有,一键还原,和前面的撤销修改一样
git checkout -- file