Git实用教程-第五篇:版本回退

       工作中难免会遇到代码需要做回退处理,今天就学习在各个阶段如何回退代码。

首先,编辑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 <[email protected]>
Date:   Fri Feb 22 16:39:06 2019 +0800

    添加一行记录

commit bf9fe41706ee6730d8a7c764e92658018bd3aa9a
Author: dudan <[email protected]>
Date:   Fri Feb 22 10:44:39 2019 +0800

    add distributed

commit 15c1e0171cf265c7f53a2e733ee87be885da372b
Author: dudan <[email protected]>
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 ..." 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 ..." to update what will be committed)
  (use "git checkout -- ..." 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 

2)回退到指定版本,并删除被回退的内容

$ git reset --hard 

3)回退暂存区的修改(尚未提交)

$ git reset HEAD 

4)回退工作区的修改(尚未添加至暂存区)

$ git checkout -- 

5)回退工作区指定目录的修改(尚未添加至暂存区)

$ git checkout <目录路径>

你可能感兴趣的:(Git实用教程-第五篇:版本回退)