Git操作略览
git status
命令可以让我们时刻掌握仓库当前的状态。
git diff
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式。
知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是git add
,在执行第二步git commit
之前,我们可以再运行git status看看当前仓库的状态。
对上图的说明:working directory
是当前的工作目录,而stage
是暂存区也称索引区存放工作目录中那些你打算提交到版本库的变更,git add
只是将文件的索引提交的版本库,而真正的内容并没有进入版本库,History
就是版本库,需要注意的是这是本地的版本库,存在于本地的电脑中,相当于你电脑上一个你的私人钱财管理员。
两个常用操作经常一块使用
git add some-file # 添加文件到暂存区
git commit -m "some changes to some-file" # 提交修改到版本库,并可以添加信息以便于区分和管理
在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log
命令查看。
git log
命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数。
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
所以查看文件改动,我们可以通过
git diff 比较working directory和stage的差别
git diff --cached 比较stage和history的差别
git diff HEAD 直接比较working directory 和history的区别
如果要回退,可以使用git reset
命令
$ git reset --hard HEAD^
如果这个时候你想要回退到最新版本,可以通过commit-id
找回,如果关闭了终端,可能就得另寻他法了——Git提供了一个命令git reflog
用来记录你的每一次命令,可以通过这个id
进行找回。
$ git reset --hart commit-id
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
在Git中,删除也是一个修改操作。在你删除文件后,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status
命令会立刻告诉你哪些文件被删除了。
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- your_file
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。