git 创建版本库
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建一个版本库 先建一个dome空目录
$ mkdir dome
$ cd dome
$ pwd
pwd
命令用于显示当前目录。在电脑上,这个仓库位于 /c/Users/user/Desktop/gits/dome。
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
git init 把dome这个目录变成Git可以管理的创库
Git会瞬间把仓库建好,而且告诉你是一个空的仓库(empty Git repository),在目录下会有一个 .git 的目录,不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
没有看到.git
目录,是因为这个目录默认是隐藏的,用ls -ah
命令就可以看见 .git 目录
不是必须在空目录下进行创建版本库,目录有东西也可以把东西放入到版本库里,然后在添加到版本库里就好了,只是怕你在有重要文件的目录下学习git,会造成文件的丢失,造成不必要的麻烦。
把文件添加到版本库里
首先要明确下,所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不列外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道。
现在在dome文件夹里建一个dome.txt文件里面写上“111”
第一步,用命令git add
告诉Git,把文件添加到仓库:
$ git add dome.txt
第二步,用命令git commit
告诉Git,把文件提交到仓库:
-m 后面 输入的是本次提交的说明,可以输任何内容,最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit
命令执行成功后会告诉你,1 file changed
:1个文件被改动(我们新添加的dome.txt文件);2 insertions
:插入了1行内容(dome.txt有1行内容)。
Git添加文件需要 add
,commit
两步是因为commit
可以一次提交很多文件,所以可以多次add
不同的文件
$ git add dome1.txt
$ git add dome2.txt dome3.txt
$ git commit -m "add 3 dome123."
git 文件修改
现在我们已经提交了一个dome.txt文件了,我们下面可以通过命令git status来查看是否还有文件未提交,如下:
说明没有文件被提交
现在在dome.txt文件里加上一行“222”,保存
现在执行 git status 命令 可以查看文件 dome.txt 的状态
git status
命令可以让我们时刻掌握仓库当前的状态
上面的命令输出告诉我们,dome.txt
被修改过了,但 是未被提交到仓库的修改。
想看dome.txt 文件到底修改了什么内容,需要用到 git diff
git diff
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个222。
执行 git diff 后我们知道dome.txt文件被修改过了,这样就可以放心的把文件放到仓库里了。
第一步 git add
第二部 git commit -m “dome.txt 第一次修改”
现在文件修改了也提交到版本库了。
版本退回
修改文件dome.txt加一行333和一行444,提交到版本库里,备注是xxxxxxxx。
查看历史提交记录用 git log 命令
git log
命令显示从最近到最远的提交日志
如果记录太多可以加上 --pretty=oneline 参数
需要友情提示的是,你看到的一大串类似7321b2a...
的是commit id
(版本号),和SVN不一样,Git的commit id
不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id
和我的肯定不一样,以你自己的为准。为什么commit id
需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
版本退回,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交7321b2a...
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
现在,我们要把当前版本append GPL
回退到上一个版本add distributed
,就可以使用git reset
命令:
现在版本退回去了,是上一个版本
如果想回到“xxxxxxxx”版本,首先要知道“xxxxxxxx”的版本号,如果软件没有关,可以很快的找到版本号如果软件关了,版本号可以通过 git reflog 命令来获取“xxxxxxxx”的版本号
git reflog
用来记录你的每一次命令
想退回那个版本用 git reset --hard 版本号,现在退回到 "xxxxxxxx"版本 git reset --hard 7321d2a
退回的版本号不用全写,写开头几位就好。
这样版本就退回去了。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL,
改为指向add distributed
然后顺便把工作区的文件更新了。所以你让HEAD
指向哪个版本号,你就把当前版本定位在哪。
未完。。。