「Git」撤销、删除与版本回退


查看修改

指令 作用
git diff <file> 查看工作区中某文件的修改。
git diff --cached <file>
git diff staged <file>
显示暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有不相同文件的增删改
git diff HEAD -- <file> 查看工作区文件(没有add到暂存区)和版本库最后一次commit之间的区别
git diff HEAD~X -- <file> 查看最近一次提交的版本与往过去时间线前数X个的版本之间的差别
git diff <branch1> <branch2> 比较两个分支最后一次commit的内容的差别
  • git diff <file>指令:当工作区有改动、暂存区为空时,比较的是工作区和最后一次commit提交;当工作区有改动、暂存区不为空时,比较的是工作区和暂存区。

重命名指令

指令 作用
git mv <name1> <name2> 将名为name1的文件重命名为name2
  • 使用git mv指令后,工作区和暂存区的文件名都被修改。以git mv file1.txt file2.txt为例,它其实相当于三条指令——mv file1.txt file2.txtgit rm file1.txtgit add file2.txt

撤销指令

指令 作用
git checkout -- <file> 将工作区中该文件的修改撤销,该文件此时应没有提交到暂存区
git checkout HEAD -- <file> 将工作区、暂存区和HEAD的提交保持一致
git reset HEAD <file> 将暂存区和HEAD的提交保持一致(达到取消暂存的效果)
git reset --hard HEAD 将工作区、暂存区和HEAD的提交保持一致
git commit --amend 如果提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了, 可以用该命令来重新提交将暂存区中的文件提交,并覆盖上一次提交信息。
  • 需要注意的是git checkout -- <file>指令应该是从先从缓存区中拉取版本还原,如果没有再到版本库中拉取还原。用廖神的话来说就是——"总之,将这个文件回到最近一次git commit或者git add时的状态"
  • git checkout HEAD -- <file>git reset --hard HEAD <file> 作用相似,都是可以使"工作区、暂存区和HEAD的提交保持一致"。但是两者并不完全一样:
    • 首先,git checkout HEAD -- <file>可以指定文件,但是git reset -- hard HEAD指令会作用于所有的文件。
    • 其次,如果使用git checkout HEAD -- .时,不会对没有commit的新增文件起作用;但如果我们使用的是git reset --head HEAD,因为新增文件没有commit,即在版本库中找不到,所以执行该命令后未commmit新文件会消失(相比git checkouit HEAD -- .更加彻底)。具体示例可参考这篇博客

删除指令

指令 作用
git rm <file> 工作区和暂存区的该文件都会被删除。
再使用git commit就可以将该文件从版本库中删除
git rm --cached <file> 从暂存区删去该文件,而工作区不删除。
此时使用git commit可以将该文件从版本库中删除,但工作区不会被删
git clean <file> -f 删除工作区中没有被追踪的文件

版本回退

在版本回退操作之前,我们可以通过git log指令来查看提交历史记录,进而确定自己想要回退的版本。(加入--pretty=oneline参数后可以让输出信息更加简洁。)确定了想回退的版本后,可以使用下面三个指令中的一个进行回滚——

指令 作用
git reset --hard HEAD^ 回退到上一个版本,^的个数表示回滚的次数
git reset --hard HEAD~100 回滚100次,~后的数字表示回滚的次数
git reset --hard <hashcode> 回滚到<hashcode>表示的版本

如果想要重返未来,则需要先使用git reflog来查看历次commitreset的记录,找到对应版本的hashcode,再使用git reset --hard [hashcode]进行重返。

执行回退指令之后,不仅HEAD指针发生了变化,而且工作区和暂存区也都和指定版本保持一致,类似于git reset --hard HEAD <file>指令


文章作者: Hyggge
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Hyggge !
  目录