工作中难免会遇到代码需要做回退处理,今天就学习在各个阶段如何回退代码。
首先,编辑readme.txt,添加一行记录,并提交至版本库
Git is a distributed version control system.
Git is open source.
Git is free software.
$ git add readme.txt
$ git commit -m "添加一行记录"
[master c3e38c6] 添加一行记录
1 file changed, 1 insertion(+)
一、回退到指定版本
查看提交日志
$ git log
commit c3e38c6867b9a7bb3f476eb9f376f9eb84db9b2b (HEAD -> master)
Author: dudan <123770097@qq.com>
Date: Fri Feb 22 16:39:06 2019 +0800
添加一行记录
commit bf9fe41706ee6730d8a7c764e92658018bd3aa9a
Author: dudan <123770097@qq.com>
Date: Fri Feb 22 10:44:39 2019 +0800
add distributed
commit 15c1e0171cf265c7f53a2e733ee87be885da372b
Author: dudan <123770097@qq.com>
Date: Fri Feb 22 10:14:16 2019 +0800
新增readme文件
现在如果要撤消刚刚的提交,只需要回退到刚刚提交的版本的前一个版本即可,通过git log可以发现前一个版本的commit_id是bf9fe41,执行git reset命令回退
$ git reset --soft bf9fe41
no news is good news,执行成功
查看当前仓库的状态
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
已经回到了提交之前的状态,提交的内容回到了暂存区。
注:如果回退指定版本时,不需要保留被回退的版本内容,则使用下面的参数,可以将版本回退到指定版本后,删除被回退的版本:
$ git reset --hard bf9fe41
二、回退暂存区的修改(尚未提交)
通过上面的操作,已经文件提交的内容回退到了暂存区,如果现在要将文件从暂存区移回到工作区,如何操作呢
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
HEAD指向的版本就是当前的版本,此时,文件就被移回工作区了,可以查看状态
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
三、回退工作区的修改(尚未添加至暂存区)
如果要将工作区的改动删除掉,可以使用下面的命令
$ git checkout -- readme.txt
如果当前工作区需要回退的文件很多,还可以通过指定目录,回退指定目录中所有修改的文件。
$ git checkout .
小结
1)回退到指定版本,并将被回退的内容移到暂存区
$ git reset --soft <commit_id>
2)回退到指定版本,并删除被回退的内容
$ git reset --hard <commit_id>
3)回退暂存区的修改(尚未提交)
$ git reset HEAD <file>
4)回退工作区的修改(尚未添加至暂存区)
$ git checkout -- <file>
5)回退工作区指定目录的修改(尚未添加至暂存区)
$ git checkout <目录路径>