git整理(二)
回退版本
#回退至上一次提交的版本
#中间的六个长度的字符串对应的是日志信息的提交id的前六位
#网上回退100个版本$ git reset --hard HEAD~100
$ git reset --hard HEAD^
HEAD is now at c338f61 第三次提交
#回退至指定版本
$ git reset --hard cac83a
HEAD is now at cac83a7 第二次提交
#查看使用过的指令
$ git reflog
cac83a7 (HEAD -> master) HEAD@{0}: reset: moving to cac83a
c338f61 HEAD@{1}: reset: moving to HEAD^
99d4ce1 HEAD@{2}: commit: 第四次提交
c338f61 HEAD@{3}: commit: 第三次提交
cac83a7 (HEAD -> master) HEAD@{4}: commit: 第二次提交
77c2b2c HEAD@{5}: commit (initial): 第一次提交
Git提交过程
我们首先要理解git的提交过程第一步是用git add把文件添加进去,实际上就是把文件修改添加到缓存区;第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到本地仓库。
创建Git版本库时,Git自动创建一个master分支,所以,现在,git commit就是往master分支上提交更改。
管理修改
#查看a文件
$ cat a.txt
aaaaaaaaaaa
#修改文件后查看
$ cat a.txt
aaaaaaaaaaa
bbbbb
#add到缓存区
$ git add a.txt
#再修改文件
$ cat a.txt
aaaaaaaaaaa
bbbbb
cc
#直接commit到本地仓库
$ git commit -m "第三次提交"
[master a4c3eaf] 第三次提交
1 file changed, 1 insertion(+)
#此时查看a.txt的状态还是修改未添加提交,这是因为,commit只把add到缓存区的文件commit到本地仓库,因此只要修改文件,都要先add再commit,这同时也是Git的一种安全机制
#git diff对比修改你修改过的文件会清楚的标识出来
$ git diff
diff --git a/learn2/a.txt b/learn2/a.txt
index 776474b..a8ff3e8 100644
--- a/learn2/a.txt
+++ b/learn2/a.txt
@@ -4,3 +4,4 @@ ccccccc
ddddddddd
eeeee
fffff
+gggg
你写代码,写完提交了,突然发现自己写错了,这时候就需要回退一下
#先修改一次提交
$ cat a.txt
aaaaaaaaaaa
bbbbbbbb
ccccccc
$ git commit -m "第三次提交"
[master a4c3eaf] 第三次提交
1 file changed, 1 insertion(+)
再修改a文件
$ cat a.txt
aaaaaaaaaaa
bbbbbbbb
ccccccc
ddddd
添加到缓存区
$ git add a.txt
回退版本
$ git checkout -- a.txt
此时再查看a文件
$ cat a.txt
aaaaaaaaaaa
bbbbbbbb
ccccccc
发现回退到修改前的版本
再修改a文件
$ cat a.txt
aaaaaaaaaaa
bbbbbbbb
ccccccc
ddddd
添加到缓存区
$ git add a.txt
查看a文件的状态 发现已经添加到缓存区 可以提交的状态
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: a.txt
用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD a.txt
Unstaged changes after reset:
M learn2/a.txt
查看a文件的状态 发现未添加到缓存区 可以添加的状态
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: a.txt
no changes added to commit (use "git add" and/or "git commit -a")