git checkout . 恢复所有暂存区文件到工作区(用来撤销工作区所有改动)git checkout <file-name> 恢复暂存区文件到工作区(用来撤销工作区文件改动)git checkout <commit-id> <file-name> 恢复某个commit的文件到暂存区和工作区git reset [--mixed | soft | hard | merge | keep ]
--mixed (默认模式) 仅重设暂存区,并把 HEAD 指向commit,但是不重设工作区,本地文件修改不受影响。(回退到某个版本,只保留源码,回退commit和index信息)
--soft 工作区中的内容不作任何改变,HEAD 指向 commit自从 commit 以来的所有改变都会回退到“暂存区”中。(回退到某个版本,只回退了commit的信息。如果还要提交,直接 commit 即可。)
--hard 重设暂存区和工作区 ,从commit以来在工作区中的任何改变都被丢弃,并把 HEAD指向commit。(彻底回退到某个版本,本地的源码也会变为上一个版本的内容。)
--keep 保留工作区和HEAD之间差异部分,如果回退的内容与保留的修改存在冲突(有相同文件)则命令会失败。(不常用)
--merge 保留暂存区和工作区之间的差异,如果回退的内容与保留的修改存在冲突(有相同文件)则命令会失败。(不常用)
git reset 重置HEAD,暂存区与上一次commit保持一致;但工作区不变git reset --soft 重置HEAD与上一次commit保持一致;暂存区和工作区不变git reset --hard 重置HEAD,暂存区,工作区与上一次commit保持一致git reset <file-name> 重置暂存区的指定文件;但工作区不变git update-ref -d HEAD 也就是把所有的改动都重新放回工作区,并清空所有的 commit,这样就可以重新提交第一个 commit 了git diff --name-only --diff-filter=U 展示工作区的冲突文件列表git reset <commit-id> 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变,指定commit之后的commit将抹除git reset --soft <commit-id> 重置当前分支的HEAD为指定commit与指定commit一致,暂存区和工作区不变,指定commit之后的commit将抹除git reset --hard <commit-id> 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致,指定commit之后的commit将抹除git revert -n <commit-id> 新建一个commit,用来撤销指定commit, 保留该目标commit后面的commitgit clean [-f|d|x] -n 显示将要被删除的文件git clean 删除工作区未跟踪文件git clean -d 删除工作区未跟踪文件夹git clean -f [path] 强制删除git clean -X -f 删除被.gitignore设置忽略的文件git reset --hard
git clean -df
git fetch --all && git reset --hard origin/master
git log #查看分支提交历史,确认需要回退的commit
git reset --hard 551c2aa #进行commit回退
git push -f origin master #推送至远程分支
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d