git学习日记
1.使用指令创建用户
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
创建自己的用户名和邮箱,“-global”表示这台机器上所有的Git仓库都会使用这个配置。
2.创建版本库
首先在一个纯英文路径下创建一个新文件夹,这里暂且命名为“learngit”。
通过指令“pwd”,来找到文件夹所在的路径。
接着,通过“git init”命令把这个目录变为Git仓库
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
系统会自动生成一个“.git”文件夹,该文件夹是git用于跟踪管理版本库的,不要手动修改文件夹内的文件。
3.把文件添加到版本库
所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在某一行加了一个单词“moriarty”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
Windows用户不要使用自带的记事本编辑任何文本文件。因为系统自带的记事本在保存编码方式为UTF-8格式的文件的时候,会在文件的开头自动添加0xefbbbf(十六进制)。可能会造成不可预知的错误。推荐使用notepad++代替记事本。记得更改默认编码格式为UTF-8。
首先,编写一个文本文件,命名为“readme”,内容如下:
Git is a version control system.
Git is free software.
将此文件放在learngit目录下。
将一个文件放入git仓库需要两步:
第一步,用命令“git add”将文件添加到仓库
$ git add readme.txt
第二步,用命令“git commit”把文件提交到仓库
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
“-m”的后面是关于本次提交的说明,用于书写备注信息。
1 file changed 表示1个文件被改动
2 insertions(+)表示插入了两行内容
commit可以一次提交很多文件,所以用户可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
4.版本控制
在工作中,可以使用“git status”命令来掌握工作区的状态,如果提示文件被修改过,可以使用命令“git diff”查看修改内容。
经过2次提交修改,目前系统内已经有了三个版本的“readme.txt”文件,在版本控制系统中,使用指令“git log”来查看历史记录。
$ git log
commit 5e06527246c4beb4c4b1575d8335e036af4fcf2c (HEAD -> master)
Author: moriarty <771248761@qq.com>
Date: Thu Nov 29 22:14:27 2018 +0800
apped GPL
commit 230f13f4f5d630e982b077c5e2f61af47ba0e59d
Author: moriarty <771248761@qq.com>
Date: Thu Nov 29 22:11:12 2018 +0800
add distributed
commit e54782f8bf39d2bde7cc2e7beccd6bec6337f7da
Author: moriarty <771248761@qq.com>
Date: Thu Nov 29 21:34:58 2018 +0800
wrote a readme file
同时,可以在后面加上“–pretty=oneline”参数,这样显示的信息就会简洁一些。
$ git log --pretty=oneline
5e06527246c4beb4c4b1575d8335e036af4fcf2c (HEAD -> master) apped GPL
230f13f4f5d630e982b077c5e2f61af47ba0e59d add distributed
e54782f8bf39d2bde7cc2e7beccd6bec6337f7da wrote a readme file
前面的数字字母串为commit id(版本号),是一个SHA1计算出来的非常大的数字。后续可以用于版本前进或后退。
在git中,用head表示当前版本,也就是最新提交的版本,上一个版本是head**,上上一个版本就是**head^,往上100个版本的时候,可以写成head~100。
将当前版本回退到上一个版本,使用指令“git reset”
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
将版本前进到一个之后的版本可以借助commit id。
$ git reset --hard 5e065
HEAD is now at 5e06527 apped GPL
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL改为指向add distributed
若之后的某一天,你想回看之前进行过的操作,可以使用指令“git reflog”来进行操作
$ git reflog
5e06527 (HEAD -> master) HEAD@{0}: reset: moving to 5e065
230f13f HEAD@{1}: reset: moving to head^
5e06527 (HEAD -> master) HEAD@{2}: commit: apped GPL
230f13f HEAD@{3}: commit: add distributed
e54782f HEAD@{4}: commit (initial): wrote a readme file