三种状态
仅修改但没有添加到暂存区
1 2 3 4 5 6 7 8 9
| $ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <file>..." 更新要提交的内容) (使用 "git checkout -- <file>..." 丢弃工作区的改动)
修改: 01.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
|
已提交到暂存区,但没有提交
1 2 3 4 5 6
| $ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <file>..." 撤出暂存区)
修改: 01.txt
|
已提交到当前分支,工作区干净
1 2 3
| $ git status 位于分支 master 无文件要提交,干净的工作区
|
提交历史
1 2 3 4 5 6 7
| $ git log commit 9cf50d94d4134f36199c19a4798fe84c81832515 Author: learnit <higoge@gmail.com> Date: Wed Dec 24 13:49:39 2014 +0800
03 ........
|
commit后面的一串数字,是提交的编号(SHA1编码),也叫版本号。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| $ git log -p 01.txt commit 9cf50d94d4134f36199c19a4798fe84c81832515 Author: learnit <higoge@gmail.com> Date: Wed Dec 24 13:49:39 2014 +0800
03
diff --git a/01.txt b/01.txt index 181417e..7e556fd 100644 --- a/01.txt +++ b/01.txt @@ -1,2 +1,3 @@ line01 02 +03 ......
|
1 2 3 4
| $ git log --pretty=oneline 9cf50d94d4134f36199c19a4798fe84c81832515 03 2e18697d9cf53454820091a5db86790102ddf8db 02 49805b0b3b55fe32219cd14d5a15583893836520 添加01.txt文档
|
1 2 3 4 5
| $ git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ad) \ %C(bold blue)[%an]%Creset' --abbrev-commit --topo-order --date=short * 9cf50d9 - (HEAD, master) 03 (2014-12-24) [learnit] * 2e18697 - 02 (2014-12-24) [learnit] * 49805b0 - 添加01.txt文档 (2014-12-24) [learnit]
|
比较
1 2 3 4 5 6 7 8 9 10
| $ git diff diff --git a/01.txt b/01.txt index fc52d75..b726728 100644 --- a/01.txt +++ b/01.txt @@ -3,3 +3,4 @@ line01 03 04 05 +06
|
1 2 3 4 5 6 7 8 9 10 11
| $ git diff HEAD diff --git a/01.txt b/01.txt index 3b6f86c..b726728 100644 --- a/01.txt +++ b/01.txt @@ -2,3 +2,5 @@ line01 02 03 04 +05 +06
|
1 2 3 4 5 6 7 8 9 10 11 12
| $ git diff 2e18 diff --git a/01.txt b/01.txt index 181417e..b726728 100644 --- a/01.txt +++ b/01.txt @@ -1,2 +1,6 @@ line01 02 +03 +04 +05 +06
|
HEAD
表示当前版本。
HEAD~
表示当前版本的前一个版本,或HEAD^
。
HEAD~~
表示将当前版本的前两个版本, 或HEAD^^
。
HEAD~100
表示当前版本的前100个版本。
撤销(后悔药)
1
| $ git checkout -- 01.txt
|
1 2 3
| $ git reset HEAD 01.txt 重置后撤出暂存区的变更: M 01.txt
|
1 2 3
| $ git reset HEAD~ 重置后撤出暂存区的变更: M 01.txt
|
1 2
| $ git reset --hard HEAD~ HEAD 现在位于 dfcfea8 05
|
--hard
参数表示放弃所有的更改,还原后工作区干净。
不加--hard
参数,即--soft
,表示将到达版本之后的所有修改,包括暂存区的修改全部放置到工作区。
通过git status
命令就可以看出--hard
参数的作用。
1 2 3 4 5 6 7 8 9 10
| $ git reflog dfcfea8 HEAD@{13}: reset: moving to HEAD~ b28a718 HEAD@{14}: commit: 06 dfcfea8 HEAD@{15}: reset: moving to HEAD~ 7cf36f0 HEAD@{16}: commit: 02.txt dfcfea8 HEAD@{17}: commit: 05 dacd44e HEAD@{18}: commit: 04 9cf50d9 HEAD@{19}: commit: 03 2e18697 HEAD@{20}: commit: 02 49805b0 HEAD@{21}: commit (initial): 添加01.txt文档
|
当后悔撤销时,尤其是加了参数--hard
时,可以通过此命令找回丢失的信息。
如果本文对你有所帮助,请小额赞助。
~~ EOF ~~