0


Git撤销修改

Git撤销修改

Git撤销修改

本篇文章主要分为两部分,一是主要说明下如何使用

Git

来撤销对文件的修改,二是如何恢复误删的文件。以前一直没有弄明白,现在终于弄清了

QAQ

。在说操作之前,先说明下

Git

工作区

暂存区

版本库

的概念。先上图,用的是菜鸟教程的图。

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 **.git**,这个不算工作区,而是 Git 的版本库。
  • 当对工作区修改(或新增)的文件执行git add命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
  • 当执行提交操作git commit时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

明白了以上概念后,接下来来说下如何撤销修改以及恢复删除的文件。

一、撤销修改

​ 撤销修改分为以下三种情况:

  1. 已经push推送到远程仓库。
  2. 已经commit提交到版本库。
  3. 已经add提交到暂存区。
  4. 暂未提交到暂存区,所有修改都在工作区。

​ 接下来就这四种情况说明下如何撤销修改。


  1. 如果push远程仓库了,并且没有远程仓库的管理权限,那就放弃把,没救了。
  2. 已经使用commit提交到了版本库。> 因为已经产生了新的提交,所以撤销修改可以使用> > git reset --hard HEAD^> > 来回退到上一个版本,从而达到撤销修改的效果。> > > git reset --hard HEAD^ //撤销之前的commit,并且舍弃之前commit的修改> git reset --soft HEAD^ //撤销之前的commit,并且保留之前的commit修改> >
  3. 已经使用add提交到暂存区,但是没有使用commit提交到版本库。> 因为已经提交到暂存区了,所以撤销修改需要先将提交到暂存区的修改拿回到工作区。> > > git reset HEAD <file>> > > 命令> > git reset HEAD <file>> > 可以把暂存区的修改撤销掉,重新放回工作区。==注意该命令和回退版本的命令的区别,因为很相似。==这样所有的修改就回到了工作区,丢弃工作区的修改只需执行以下命令。> > > git checkout -- <file># 使用 git restore <file> 的效果一样> > > 命令> > git checkout -- <file>> > 会将工作区的修改撤回到最后一次> > git add> > 或> > git commit> > 时的状态。
  4. 文件修改都在工作区,没有提交到暂存区。> 丢弃工作区的修改只需要执行一下命令:> > > git checkout -- <file># 使用 git restore <file> 的效果一样> > > 命令> > git checkout -- <file>> > 会将工作区的修改撤回到最后一次> > git add> > 或> > git commit> > 时的状态。有两种情况,即:> > > - 一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;> - 另一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

二、文件删除

​ 文件删除其实也是一个修改动作。当使用

rm

命令或者通过鼠标右击删除文件时,工作区就产生了修改。这时候有两种选择:

​ 1.确实要从版本库中删除该文件,使用命令

git rm <file>

然后使用

git commit

进行提交。PS工作区删除文件后,然后使用

git add <file>

的效果和直接使用

git rm <file>

的效果是一样的。
​ 2. 另一种情况是删除错了,这时候只要使用

git checkout -- <file>

即可把误删的文件恢复到最新版本,最后一次提交后修改的内容会丢失PS:从来没有被添加到版本库就被删除的文件,是无法恢复的!

标签: git

本文转载自: https://blog.csdn.net/qq_37284607/article/details/118822368
版权归原作者 路痴的兔子 所有, 如有侵权,请联系我们删除。

“Git撤销修改”的评论:

还没有评论