前言
在git 中,我们要将一个文件提交到远程仓库很简单,git提交流程如下
其中,暂存区
也被称为工作空间
但是要回退到之前的版本,还是有一点难度的,因为大部分的人都没有操作过,知道的人也就少了;所以今天特地写一篇博客,记录下回退的过程;
如何知道文件是否在暂存区呢?
有2种方式
第一种:通过命令
输入命令git status
命令查看,下图中,
Changes to be cimmitted
:表示是修改的文件,既然是修改,就代表这个文件是已存在的;Untracked files
:翻译为中文是:“未跟踪”的意思,也就是不在暂存区的文件;
第一种:通过idea查看
打开idea的LocalChanges查看:
- 蓝色表示修改的文件,
- 红色表示未添加到暂存区的文件
回退类型
- 已提交,未push到远程仓库
git reset --soft 版本id
: 撤销commitgit reset --mixed 版本id
:撤销commit 和 add 两个动作
- 已提交,并且已push到远程仓库
git reset --hard 版本id
: 撤销并舍弃版本号之后的提交记录,使用需谨慎git revert 版本id
: 撤销。但是保留了提交记录(建议使用);
- 修改了文件,未提交
git checkout -- 文件名称
还原已修改的文件
1、git reset —soft 撤销commit
首先看看已提交的记录,通过 git status
查看
如果你用的 idea 开发工具,也可以通过快捷键 ctrl + shift + k
查看已提交但未push的记录
通过git log
查看所有的提交记录,第一个就是我们的刚刚提交但未push的版本;第二个是当前远程仓库最新的版本
要回退到上一个版本,先复制当前远程仓库最新的版本号id,也就是上图的第二个版本号id
ca38ec2648d51067a9f108689431ba640236d43c
回退,通过指定版本id的方式即可回退到最新的版本
git reset --soft ca38ec2648d51067a9f108689431ba640236d43c
执行后没有报错就表示成功
在通过命令git status
查看,本地仓库中的版本已经没了,已经回退到指定了版本了,回到了,未提交的状态,其中 modified
就是你已经修改了,但是未提交的文件;
通过快捷键 ctrl + shift + k
看到提交的也没了
2、git reset —mixed 撤销commit 和 add 两个动作
首先创建一个文件 123.txt
然后添加到 暂存区,然后commit
到本地仓库
# 添加到暂存区
git add .
# 提交到本地仓库
git commit -m "commit..."
通过 git status
可以看到已经提交到本地仓库了,这边只会告诉你有一个文件未push,但是不是告诉你具体是什么文件
输入 git log
可以看到刚刚提交的内容,因为我们要回滚到上一个版本,所以先复制上一个版本的id;
进行回滚,输入以下命令
git reset --mixed ca38ec2648d51067a9f108689431ba640236d43c
没有报错,表示回滚成功了
通过 git status
查看,回到了原始状态,未添加到 暂存区,同时撤销了 commit
和 add
两个操作
3、git reset —hard 撤销并舍弃版本号之后的提交记录,撤销push、commit、add 三个动作
首先创建一个文件 123.txt
然后添加到 暂存区,然后commit
到本地仓库并push
到远程仓库
# 添加到暂存区
git add .
# 提交到本地仓库
git commit -m "commit..."
# push到远程仓库
git push
通过 git log
命令可以看到,已经提交到远程仓库了
然后进行回退到上一个版本的操作,复制上一个版本的id,输入以下命令
git reset --hard ca38ec2648d51067a9f108689431ba640236d43c
一定要强制推送到远程分支,否则不会变更
git push -f origin master
通过 git log
查看,发现已经将远程仓库的版本回退到了上个版本,并且刚刚push的记录也没了;
4、git revert 撤销。但是保留了提交记录;
git revert
和其他的回退不太一样,其他的回退到指定版本后,都会清除调之后的版本,但是 git revert 不会删除版本,而是新建一个版本来存储回退的内容
用户也很简单,根据上面的例子操作一遍就号,因为 git revert 这个命令确实用的不多,所以这边也不做演示,使用格式为;
git revert 版本id
5、git checkout — 还原已修改但是未提交的文件
// 指定还原`aaa.html`文件
git checkout -- aaa.html
// 还原所有文件
git checkout -- *
git checkout -- .