git笔记四

git log --graph --oneline 中的--oneline相当于 --pretty=oneline但是可以显示更短小的id

git reset --hard HEAD^ 

git reset --hard <commit的sha1值>可以回滚到任何一次commit 

回滚后就回不去了

用reflog挽救错误的重置

查看分支日志文件

tail -5 .git/logs/refs/heads/master

 git reflog show master | head -5

git reset --hard master@{2} 回到刚才没回滚之前的状态

git log --oneline

git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

具体一个例子,假设有三个commit, git st:

commit3: add test3.c

commit2: add test2.c

commit1: add test1.c

如果执行git reset --hard HEAD~1则 删除了commit3,如果发现删除错误了,需要恢复commit3,这个时候就要使用git reflog

 

git  reflog show master | head -5

git reset -q HEAD test.ini

 使用版本库中的test.ini文件,替换掉暂存区的

HEAD是当前版本库的引用,也可以用commitsha1值代替

 

 

 

 

 

 

 

 

git reset -- hard <commit>  

1 版本库的master引用指向上一次commit

2 替换暂存区,暂存区内容和目录树一致(也就是和版本库一致)

3 替换工作区,工作区的内容变得和暂存区一样

git reset --soft <commit>

 1 版本库的master引用指向上一次commit

2 暂存区不变

3 工作区不变

 git reset --mixed(默认的。加不加都行) <commit>

1 版本库的master引用指向上一次commit

2 替换暂存区,暂存区内容和目录树一致(也就是和版本库一致)

 

 

 

 

git reset

1 head指向的目录树重置暂存区,工作区不会受影响 就是说,将版本库的内容替换掉暂存区的内容。

执行的 git add的内容都撤销 ,

 

git reset head 同上

 

git reset -- filename  将filename撤出暂存区 暂存区其他文件不变,相当于git add filename的反向操作

git reset HEAD filename 同上

 

git reset --soft HEAD^ 

工作区暂存区不变 引用倒退一次。(引用指得就是版本库的head指向的最新commit),当对最新的commit不满意时,撤销

git commit --amend 对最新的提交修补提交说明 相当于执行了下面两条命令

git reset --soft HEAD^

git commit -e -F .git/COMMIT_EDITMSG

 

git reset HEAD^

工作区不变 但是暂存区会回退到上一次提交之前,引用也回退一次

git reset --mixed HEAD^同上

git reset --hard HEAD^  撤销最近的提交 引用回退一次,暂存区工作区全部会退一次,上一次提交消失

 

 

 

 

原文地址:https://www.cnblogs.com/or2-/p/3400481.html