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是当前版本库的引用,也可以用commit的sha1值代替
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^ 撤销最近的提交 引用回退一次,暂存区工作区全部会退一次,上一次提交消失