shell > git diff HEAD -- passwd
diff --git a/passwd b/passwd
index 03dab68..96635c1 100644
--- a/passwd
+++ b/passwd
@@ -1,5 +1,5 @@
root:x:0:0:root:/root:/bin/bash
-bin:x:1:1:bin:/bin:/sbin/nologin
-daemon:x:2:2:daemon:/sbin:/sbin/nologin
-adm:x:3:4:adm:/var/adm:/sbin/nologin
-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
+bin:x:1:1:bin:/bin:/sbin/login
+daemon:x:2:2:daemon:/sbin:/sbin/login
+adm:x:3:4:adm:/var/adm:/sbin/login
+lp:x:4:7:lp:/var/spool/lpd:/sbin/login
## 可以使用 git diff 指令查看工作区跟版本库( 分支 )的文件( 改动 )差异( HEAD 代表分支中( 版本库 )当前版本,即最新版本 )
shell > git add passwd
shell > git commit -m "two"
[master 6fd5803] two
1 files changed, 4 insertions(+), 4 deletions(-)
shell > git status
# On branch master
nothing to commit (working directory clean)
## 将修改后的文件提交到了版本库中,搞了个标记叫 two ,呃,代表第二次提交
## 提交完成后,工作区就没有东西了
shell > sed -i 's/bash/Python/' passwd
shell > git add passwd
shell > git commit -m "three"
[master 4cba143] three
1 files changed, 1 insertions(+), 1 deletions(-)
shell > git status
# On branch master
nothing to commit (working directory clean)
shell > git diff HEAD -- passwd
## 第三次提交完成,使用 git diff 指令发现版本库中最新版本跟工作区文件完全相同
shell > git log
git log
commit 4cba14306c482080f442043b33f1dd640352a3f9
Author: linuxidc <linux@linuxidc.com>
Date: Tue Jul 21 19:51:30 2015 +0200
three
commit 6fd5803a3fc2d3039ceaf6fc0b9c4fb8f0dfc67a
Author: linuxidc <linux@linuxidc.com>
Date: Tue Jul 21 19:43:17 2015 +0200
two
commit 7af25e23a89ba16e5ff14a8da305542bc9cc6062
Author: linuxidc <linux@linuxidc.com>
Date: Tue Jul 21 18:54:41 2015 +0200
one
## 通过 git log 指令可以清楚的看到总共有三次提交,标记为 one 、two 、three ,现在想回到上次版本( two )怎么办 ?
shell > git reset --hard HEAD^
HEAD is now at 6fd5803 two
shell > cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/login
daemon:x:2:2:daemon:/sbin:/sbin/login
adm:x:3:4:adm:/var/adm:/sbin/login
lp:x:4:7:lp:/var/spool/lpd:/sbin/login
## 使用 git reset 指令,HEAD^ 代表上个版本,HEAD^^ 代表上两个版本,现在已经回到了 two 版本了( three 版本的 bash 变为 python 已经又恢复成 bash 了 )
shell > git log
commit 6fd5803a3fc2d3039ceaf6fc0b9c4fb8f0dfc67a
Author: linuxidc <linux@linuxidc.com>
Date: Tue Jul 21 19:43:17 2015 +0200
two
commit 7af25e23a89ba16e5ff14a8da305542bc9cc6062
Author: linuxidc <linux@linuxidc.com>
Date: Tue Jul 21 18:54:41 2015 +0200
one
## 现在就剩两个版本了,最上面 two 为最新版本,即当前版本
## 恢复到某个版本,假设有好多好多个版本,使用 HEAD^^^^ 或 HEAD~[number] 的方式就很不方便了( 都要数 )
## 既然 HEAD 代表版本号,那么恢复时直接输入版本号不就可以了?非常方便,git log 指令输出的 commit 字段( 7af25e23a89ba16e5ff14a8da305542bc9cc6062 )就是版本号
shell > git reset --hard 7af25e2
HEAD is now at 7af25e2 one
shell > cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
## 使用 git reset 指令时,只需输出版本号的前几位即可,可以看到已经恢复到了第一版,文件内容也变回了最初的状态
shell > git log
commit 7af25e23a89ba16e5ff14a8da305542bc9cc6062
Author: linuxidc <linux@linuxidc.com>
Date: Tue Jul 21 18:54:41 2015 +0200
one
## 这时使用 git log 指令发现只有第一次提交的版本了,那么现在想回到 two 或 three 版本该怎么办?( 版本号没有了 )
shell > git reflog
7af25e2 HEAD@{0}: 7af25e2: updating HEAD
6fd5803 HEAD@{1}: HEAD^: updating HEAD
4cba143 HEAD@{2}: commit: three
6fd5803 HEAD@{3}: commit: two
shell > git reset --hard 4cba143
HEAD is now at 4cba143 three
## 使用 git reflog 指令可以看到操作记录,第一列就是我们想要的版本号,再次使用 git reset 指令恢复即可