Bootstrap

git常用撤回命令

1.常用概念

工作区(工作代码):现在的代码,包括了在之前提交基础上的增删改查操作
未修改:代码自上次提交未修改
未追踪(untracked):新建的文件|被.gitignore忽略的文件(未纳入git版本控制),可通过git add . 纳入版本控制,变为已追踪状态
已追踪(tracked):被纳入git版本控制中的文件(新创建的文件被git add .即可被追踪|已经存在的已追踪文件就是已追踪状态)

未暂存(unstaged):修改了的文件
已暂存(staged):git add . 添加的未暂存文件
已提交:通过git commit -m ‘xxxx’ 提交的文件,提交后所有已追踪的文件将变为未修改状态(不是未暂存也不是已暂存状态)

上次提交:上次commit后的代码

2.常用撤回命令

以下的 . 均可以用文件名替代

  • 对于已追踪的文件

    git restore --staged . //将文件(未暂存/已暂存) 退回到未暂存状态 但保留所有修改
    git restore . //将文件(未暂存/已暂存) 退回到未修改状态 并撤回所有修改
    git checkout . //将文件(未暂存/已暂存) 退回到未修改状态 并撤回所有修改(与git restore . 完全相同)
    
  • 对于未追踪的文件 (即新建的文件)

    git clean -n 查看要删除的未追踪文件
    git clean -f 删除所有未追踪文件
    

3.常见实用环境汇总

  1. 回到上次提交的代码(即我这次一顿乱写进行的修改全不想要了,想全不保存,想回到最初的起点)

    git reset --hard 或 git checkout .
    
  2. 回到某次提交的代码,但想保留我这次进行的所有修改(即由于我很菜,进行了很多次提交,不想再要中间这些提交了,比如我为了改一个bug提交了40次,但最后推到远程我只想显示有一次提交)

    git log //查看一下你想回到的那次提交的hash
    git reset --soft 你查到的hash值
    
  3. 新建了某个文件,显示未追踪,但是不想要了

    git clean -n
    git clean -f
    
  4. 不小心对某个文件进行了修改,想让它变回未修改时(上次提交)的样子。(或者当你要提交的文件很多时,发现某个文件不应该被改变但不知道什么时候改了,不该提到线上)

    git checkout filepath //filepath是你想撤回的文件路径
    
  5. 想回到git add .前的状态,即未暂存的状态,但是保存现在更改的代码

    git restore --staged .
    
;