1、 git log / git reflog

功能:查看日志

1)直接查看

$ git log

显示如下:
log的显示图片
注:
查看时: b:上一页 空格:下一页 q:退出

按时间,由近及远显示了日志。
注意:HEAD -> master.
这里的HEAD指的是目前分支的指针。
有点类似于C++面向对象里的this?

这种模式下日志非常多,需要翻页才能查看。

2) git log —pretty=oneline

此模式下仅显示哈希值和commit
log的显示图片

3) git log —oneline

相较于git log —pretty=oneline,此模式的哈希值仅显示一部分。
log的显示图片

4) git reflog

相较于git log —oneline,此模式增加了HEAD@{9}值,这里的9指的是与Head指针的距离。对于版本回溯,这个参数非常有用。
log的显示图片

当版本回退后,git log仅能查看之前的commit.(比如,假如回退到了第一个版本,那么就只显示这一个版本)

而 git reflog始终能查看所有版本。

2、git reset

功能:版本前进/后退

方法1: 基于索引值

这里的索引值指的是精简后的哈希值。

示例:
reset的显示图片
这时候HEAD指针已经改变,并且查看源文件夹后发现,内容已经回溯到以前的版本。
reset的显示图片

再次使用git reset可以恢复文件。

^~:版本前进与回退

git reset —hard HEAD^ 回退
git reset —hard HEAD~ 前进

也可以控制回退/前进的步幅
git reset —hard HEAD^^^回退3个版本
git reset —hard HEAD^3 回退三个版本

3、hard / soft / mixed 比较

Tip:查看官方help文件的方法:git help <命令>。比如 git help reset。

  • 查看官方help文件,reset的三个参数解释如下:

  • —soft
    Does not touch the index file or the working tree at all (but resets the head to <commit>,just like all modes do). This leaves all your changed files “Changes to be committed”, as git status would put it.
    —mixed
    Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated. This is the default action.

    If -N is specified, removed paths are marked as intent-to-add (see git-add(1)).
    —hard
    Resets the index and working tree. Any changes to tracked files in the working tree since are discarded.

  • soft: 仅仅在工作区移动HEAD指针

  • mixed: 移动HEAD指针,重置暂存区
  • hard: 移动HEAD指针,重置暂存区与工作区

3、rm 删除与恢复

注意这是linux的基本命令,不是git命令

$ rm hahaha.txt
$ git status

窗口提示:

On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    hahaha.txt

rm仅仅会删除工作区文件,而暂存区和本地库文件仍被保留。

如果想删除暂存区与本地库文件,还需要:

$ git add hahaha.txt
$ git commit -m "delete hahaha.txt"

此时文件已被完全删除。

但是文件仍可恢复。

只需要使用git reset,回退到未删除之前的版本,文件就会被恢复。
恢复文件的前提是:文件在删除之前已经被提交到了本地库

4、 git diff 比较文件差异

1)git diff: 比较工作区和暂存区

diff的显示图片
红色为工作区缺少的内容
绿色为工作区增加的内容

2)git diff <指针> <文件名>,比较本地库和工作区的差异。

也可以不指定文件名,会比较所有的文件。