• 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后面的commit
  • git clean [-f|d|x] -n 显示将要被删除的文件
  • git clean 删除工作区未跟踪文件
  • git clean -d 删除工作区未跟踪文件夹
  • git clean -f [path] 强制删除
  • git clean -X -f 删除被.gitignore设置忽略的文件
  • 恢复到最近一次commit
    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 #推送至远程分支
    
  • 删除已经合并到 master 的分支
    git branch --merged master | grep -v '^\*\|  master' | xargs -n 1 git branch -d