三种状态
仅修改但没有添加到暂存区
123456789 |
$ git status位于分支 master尚未暂存以备提交的变更: (使用 "git add <file>..." 更新要提交的内容) (使用 "git checkout -- <file>..." 丢弃工作区的改动) 修改: 01.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") |
已提交到暂存区,但没有提交
123456 |
$ git status位于分支 master要提交的变更: (使用 "git reset HEAD <file>..." 撤出暂存区) 修改: 01.txt |
已提交到当前分支,工作区干净
123 |
$ git status位于分支 master无文件要提交,干净的工作区 |
提交历史
1234567 |
$ git log # 显示所以提交历史commit 9cf50d94d4134f36199c19a4798fe84c81832515Author: learnit <higoge@gmail.com>Date: Wed Dec 24 13:49:39 2014 +0800 03........ |
commit后面的一串数字,是提交的编号(SHA1编码),也叫版本号。
12345678910111213141516 |
$ git log -p 01.txt # 显示某个文件的历次修改commit 9cf50d94d4134f36199c19a4798fe84c81832515Author: learnit <higoge@gmail.com>Date: Wed Dec 24 13:49:39 2014 +0800 03 diff --git a/01.txt b/01.txtindex 181417e..7e556fd 100644--- a/01.txt+++ b/01.txt@@ -1,2 +1,3 @@ line01 02+03...... |
1234 |
$ git log --pretty=oneline # 在一行上显示log9cf50d94d4134f36199c19a4798fe84c81832515 032e18697d9cf53454820091a5db86790102ddf8db 0249805b0b3b55fe32219cd14d5a15583893836520 添加01.txt文档 |
12345 |
$ 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] |
比较
12345678910 |
$ git diff # 暂存区与工作区的比较diff --git a/01.txt b/01.txtindex fc52d75..b726728 100644--- a/01.txt+++ b/01.txt@@ -3,3 +3,4 @@ line01 03 04 05+06 |
1234567891011 |
$ git diff HEAD # 工作区+暂存区与当前版本的比较diff --git a/01.txt b/01.txtindex 3b6f86c..b726728 100644--- a/01.txt+++ b/01.txt@@ -2,3 +2,5 @@ line01 02 03 04+05+06 |
123456789101112 |
$ git diff 2e18 # 不需要把编号全部写出diff --git a/01.txt b/01.txtindex 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 # 放弃工作区的修改 !!!慎用!!! |
123 |
$ git reset HEAD 01.txt # 移出暂存区的修改,放回工作区重置后撤出暂存区的变更:M 01.txt |
123 |
$ git reset HEAD~ # 恢复到某个版本,所有的修改(包括暂存区中的修改)放回工作区重置后撤出暂存区的变更:M 01.txt |
12 |
$ git reset --hard HEAD~ # 恢复到某个版本,放弃所有的修改HEAD 现在位于 dfcfea8 05 |
--hard
参数表示放弃所有的更改,还原后工作区干净。
不加--hard
参数,即--soft
,表示将到达版本之后的所有修改,包括暂存区的修改全部放置到工作区。
通过git status
命令就可以看出--hard
参数的作用。
12345678910 |
$ git reflog # 记录了每次执行的命令dfcfea8 HEAD@{13}: reset: moving to HEAD~b28a718 HEAD@{14}: commit: 06dfcfea8 HEAD@{15}: reset: moving to HEAD~7cf36f0 HEAD@{16}: commit: 02.txtdfcfea8 HEAD@{17}: commit: 05dacd44e HEAD@{18}: commit: 049cf50d9 HEAD@{19}: commit: 032e18697 HEAD@{20}: commit: 0249805b0 HEAD@{21}: commit (initial): 添加01.txt文档 |
当后悔撤销时,尤其是加了参数--hard
时,可以通过此命令找回丢失的信息。
~~ EOF ~~
时间: 2024-09-17 04:13:52