什么是版本库
版本库简单理解其实就是一个目录,在这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,在将来某个时刻可以“还原”成历史时刻中的随意一个版本。创建版本库
首先,打开Git Bash,在配置好name和email标识后,选择一个合适的路径(避免中文和空格的出现),创建一个空目录,进入该目录 mkdir learngit
cd learngit
pwd
/Users/michael/learngit
pwd命令用于显示当前目录。
第二步,初始化版本库,通过git init
命令把这个目录初始化成一个Git仓库
git init
Initialized empty Git repository in /gitReposity/.git/
初始化后,在该目录下回多一个.git文件夹,这个文件夹是用来管理当前这个Git仓库的,一定要避免修改这个文件夹,它是一个隐藏文件夹,也可以用
ls -ah
让它显示。
文件添加版本库
版本控制的版本跟踪,只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,版本控制系统无法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
第一步,在仓库里创建一个read.txt,然后通过下面的命令将这个添加到本地仓库中,也是就让git记录下添加的这个修改动作。
git add readme.txt
第二步,用命令git commit
告诉Git,把文件提交到仓库
git commit <文件名> -m “<提交是添加的注释>”
如果进入vim按I进行输入,按Esc退出输入模式,然后输入:wq(或者其他)命令退出vim编辑器。
为什么Git添加文件需要add
,commit
一共两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件,比如:
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."
版本回退
在对仓库内的文件进行了修改,但是还未执行添加和提交命令时,git status
命令可以让我们时刻掌握仓库当前的状态。
从上方的红字 modified: read.txt 告诉我们read.txt文件进行了修改,如果我们记不住修改了什么,可以通过git diff 查看修改了哪个部分
。
命令显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,此次改动是在第一行添加了一串字符,这个查询状态以及代码对比都是在未提交情况下进行执行的。
每次我们对文件修改提交后都会有一个记录,方便我们回退到当时的记录版本,通过git log
命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数。
可以看到我们有很多的提交记录,commit id 是一串看不懂的字符,它是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id
和我的肯定不一样,以你自己的为准,用可视化如下图:
由上图知道当前的仓库是commit id :4bb7f1a6e63609107bd476e2d02c6cf8a035a47c 这个版本,在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^ 如果版本较多,可以直接写成
HEAD~100
。
使用
git reset
命令进行回退
git reset --hard HEAD^
HEAD is now at ea34578 add distributed
或者是用 git reset --hard <版本号,没必要写全,前几位就可以了>
git reset --hard 3628164
HEAD is now at 3628164 append GPL
当然,如果在回退版本后感觉操作错误,也可以通过命令git reflog
用来查询你的每一次命令(提交、reset)