分布式版本控制系统——Git
- 分布式版本控制系统,每一台计算机都有一个完整的版本库。
- 集中式版本控制系统,版本库存放在中央服务器。
- 所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
- Microsoft的- Word格式是- 二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
一、Git安装
- ① 在 Windows上使用Git,可以从Git官网直接下载安装程序,然后按照默认选项安装即可。
- ② 安装完成后,在开始菜单里找到Git Bash,蹦出一个类似命令行窗口的东西,就说明Git安装成功了。
- ③ 安装完成后,还需要最后的配置,因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。git config --global user.name "Your Name" git config --global user.email "email@example.com"- 注意:git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
 
- 注意:
二、创建版本库
- 版本库也叫仓库(repository),可以简单的理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
- ① 首先,选择一个合适的地方,创建一个空目录:mkdir -p d:/code/test-git cd d:/code/test-git pwd  - pwd命令是用来显示当前目录的。
- 注意:使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(保留父目录)不包含中文。
 
- ② 通过 git init命令把这个目录变成Git可以管理的仓库。
  
三、将文件交给Git管理
- ① 在刚才的仓库目录 - test-git目录下编写一个- readme.txt文件,内容如下:- Git is version control system. Git is free software.- 如果使用 Windows 出现上面的警告,我们现在先不用管的,不会影响使用的。
 
- ② 用命令 - git add告诉Git,把文件添加到仓库- git add <fileName> #添加一个文件 git add . #添加所有文件 
- ③ 用命令 - git commit -m "这里写备注"告诉Git,把文件提交到仓库:
  - git commit一次可以提交很多文件。
 
- git status命令可以让我们时刻掌握仓库当前的状态。
- git diff <filename>命令顾名思义就是查看difference,可以查看修改的内容。
- 例如下面我修改 - readme.txt文件后查看,当前仓库的状态以及修改的内容:
  
注意:Git管理的是修改(删除一行、删除一个文件、添加一个字符等都算修改),而不是管理的文件。
每次修改,如果不用git add命令到暂存区,拿就不会加入到commit中,所以如果你你想每一次的修改都被commit,那么你要确保每一次修改后都有被git add。
四、Git的工作区和暂存区
1.工作区(Working Directory)
- 就是在自己电脑里能看到的目录,比如我们前面创建的test-git文件夹就是一个工作区。
2.版本库
- 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
- Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master(main),以及指向master(main)的一个指针叫HEAD。
  
- 在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
- 前面讲了我们把文件交给Git管理的时候,主要是分两步执行的: 
  - 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区
- 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
 
- 第一步是用
五、版本回退和撤销修改
1.版本回退
- git log命令显示从最近到最远的- 提交日志(查看提交历史),如果嫌输出信息太多,看的眼花缭乱的,可以加上- --pretty=oneline --abbrev-commit参数。
- git reflog命令,用来记录每一次命令。(查看历史命令)
   - 那一大串的数字和字母是commit_id。
 
- 那一大串的数字和字母是
- HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令- git reset --hard <commit_id>。如果是回退到上一个版本直接使用命令- git reset --hard HEAD^
  
2.撤销修改
- (1)修改没有提交到暂存区中: 
  - git checkout -- <filename>,可以丢弃工作区的修改:- ① 一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态。
- ② 一种是文件已经添加到暂存区后,又做了修改,现在,撤销修改就回到添加到暂存区后的状态。
 
- 总之,就是让这个文件回到最近一次git commit或git add时的状态。
 
- (2)修改提交到了暂存区: 
  - git reset HEAD <filename>命令可以回到上面的场景(1)。
 
- (3)修改提交到了版本库中,想要撤销本次的修改,通过上面的版本回退可以实现撤销修改,但是前提是没有推送到远程库。
六、删除文件
- 直接在文件管理器中把没用的文件删了,或者用 rm命令删了:- ① 如果确定从版本库中删除该文件,那就用命令 git rm <filename>删掉,然后用git commit。
- 先动手删除,然后使用git rm <filename>和git add <filename>效果一样的。
 
- ① 如果确定从版本库中删除该文件,那就用命令 
七、常用基础命令总结
git init #创建一个版本库
git add <filename> #提交一个文件到暂存区
git add . #将所有修改提交到暂存区
git commit -m "comment" #将所有暂存区的修改提交到版本库中
git status #查看当前仓库当前的状态
git diff <filename> #查看修改的内容
git log --pretty=oneline --abbrev-commit #查看最近到最远的提交日志
git reflog # 查看每一次的命令
git rm <filename> #删除一个文件
git checkout -- <filename> #让这个文件回到最近一次git commit或git add时的状态
git reset --hard <commitId> #回退到指定的版本。
git reset --hard HEAD^ #退回到上一个版本
git reset HEAD <filename> #撤销暂存区的修改
八、参考
[1]. Git官网
 [1]. Git简介 - 廖雪峰的官方网站——直接看这个谢谢,写的太好了。