【Git】文件操作 - 误删除

情况一:文件已经commit,不小心在资源管理器中删除了该文件

bash
复制代码
git restore 文件名
image-20231124205815891

情况二:(reset)不仅在资源管理器中删除了,还将删除操作提交了

解决办法:reset(重置),即恢复到上一个版本

bash
复制代码
git reset [option] [commitId]

option 参数的选项有以下几种

  1. git reset --mixed :此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本, 只保留源码,回退commit和add信息
  2. git reset --soft:回退到某个版本, 只回退了commit的信息 。如果还要提交,直接commit即可
  3. git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,慎用!

git reset --hard 39829c0

image-20231124210501089

回车之后可以发现文件已经恢复了,此时再查看日志,它将我们的提交过程丢失了:

image-20231124210540925

情况三:(revert)如果又想要恢复文件,又不想让提交过程丢失

git revert 版本号,这个版本号是恢复到哪个提交之前

  • revert 与 reset 的作用一样,都是恢复版本,但是他们两者的实现方式不同。
  • 简单来说 reset 是直接恢复到上一个提交,工作区的代码自然也恢复到上一次提交的代码;而 revert 是新增一个提交,但是这个提交是使用上一次的代码。
  • 因此,他两恢复后的代码是一致的,区别是一个新增提交(revert),一个是回退提交(reset)
  • 正因为 revert 永远是在新增提交,因此本地仓库版本永远不可能落后于远程仓库,可以直接推送到远程仓库,故而解决了 reset 之后需要加 -f 参数的问题,提高了安全性。

image-20231124210845915

如果需要远程仓库也回退,可以使用“git push -f -u origin master”强制推送到远程仓库。


--amend

git reset 还提供了恢复到上一次提交的快捷方式:

bash
复制代码
git reset --soft HEAD~1 # 只回退了 commit add的操作还在

其实平日开发中最多的误操作是这样:刚刚提交完,突然发现了问题,比如提交信息没写好,或者代码更改有遗漏,这时需要撤回到上次提交,修改代码,然后重新提交。

这个流程大致是这样的:

bash
复制代码
# 1. 回退到上次提交 $ git reset HEAD^ # 2. 修改代码... ... # 3. 加入暂存 $ git add . # 4. 重新提交 $ git commit -m 'fix: ***'

针对这个流程,git 还提供了一个更便捷的方法:

bash
复制代码
git commit --amend

这个命令会直接修改当前的提交信息。如果代码有更改,先执行 git add,然后再执行这个命令,比上述的流程更快捷更方便。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP