美文网首页
git的时光穿梭

git的时光穿梭

作者: size_of | 来源:发表于2017-07-25 14:52 被阅读0次

版本回退

当初始化一个git仓库后,.git文件就是你的版本库。你工作的文件目录被称为工作区,而.git文件中存在一个被称为stage(或者叫index)的暂存区。我们工作的大概流程一般是修改工作区的文件,执行 git add 文件名,将改动添加到暂存区,确认无误后执行git commit -m "xxx",再将暂存区的内容提交到主分支。但是如果在这之中出现了错误想撤销上一步操作我们应该怎么办呢?这里分三种情况:

撤销工作区的修改

命令git checkout -- 文件名意思就是,把文件在工作区的修改全部撤销,这里又分两种情况:

一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

撤销暂存区的修改

如果你发现添加到暂存区的代码出现了bug,那么这时候用命令git reset HEAD 文件名可以把暂存区的修改撤销掉(unstage),重新放回工作区。
其实这时候你工作区的代码是有问题的,所以你可以用上面介绍的命令git checkout -- 文件名将工作区的修改撤销。

撤销版本库的修改

$ git reset --hard HEAD^可以回退到上一个版本,使用git log命令可以查看commit的历史记录和id,$ git reset --hard id前几位就可以回退到想要的版本。具体用法请看下面。

$ git reset命令的用法

我们先用git log命令查看commit日志,以下测试代码都以这个主分支为基准

$ git log
commit 8f15b4cc534c83d2baf3b312d28c1c78f511fd81
Author: Elemento <18733660998@163.com>
Date:   Tue Jul 25 11:38:56 2017 +0800

    添加c

commit 6283e2a3c0e0406b8f055ce16215efcbb55573d7
Author: Elemento <18733660998@163.com>
Date:   Tue Jul 25 11:38:32 2017 +0800

    添加b

commit a78a9273893b6b14ab2438e74abcf32b3c9484fe
Author: Elemento <18733660998@163.com>
Date:   Tue Jul 25 11:37:57 2017 +0800

    添加a

回退版本库

使用git reset命令回退两个版本

$ git reset head~2
Unstaged changes after reset:
M       test.txt

$ git log
commit a78a9273893b6b14ab2438e74abcf32b3c9484fe
Author: Elemento <18733660998@163.com>
Date:   Tue Jul 25 11:37:57 2017 +0800

    添加a

回退工作区和暂存区

想要 选择性的回退 这两部分则要添加一些参数,比如--soft、--mixed、--hard

  • --soft: 暂存区和工作区都不回退 (建议在命令行执行后,再输入 git status 查看状态)
  • --mixed: 暂存区回退, 工作区不回退。【这是默认选项】(建议同上)
  • --hard:暂存区和工作区都将回退

测试--soft参数

$ git reset --soft head^

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   test.txt
//只有版本库回退了,暂存区中仍有add的内容

测试--mixed参数

$ git reset --mixed head^
Unstaged changes after reset:
M       test.txt

$ 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:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

//现在版本库和暂存区都回退了,工作区的内容是修改过的,暂未add到暂存区,暂存区为空

测试--hard参数

$ git reset --hard head^
HEAD is now at 6283e2a 添加b

$ git status
On branch master
nothing to commit, working directory clean

//现在版本库、暂存区和工作区都回退了

更新中,待续...


参考了廖雪峰的官方网站以及git reset, git checkout, git revert 区别,本文只作为平时的学习笔记。

相关文章

  • git的时光穿梭

    版本回退 当初始化一个git仓库后,.git文件就是你的版本库。你工作的文件目录被称为工作区,而.git文件中存在...

  • Git时光穿梭机制

    我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.t...

  • Git时光穿梭&远程仓库

    廖雪峰git 常用命令 mkdir -----创建文件夹 cd ----- 进入文件夹 pwd ----- 显示当...

  • git时光穿梭机reset

    在开发过程中,git的版本管理越来越普及。在版本管理中,最常用和最重要的是重置提交的版本,恢复后悔做了的事。大家都...

  • 01、如何使用GIT_01

    [toc] git git是一个用于帮助用户实现版本控制的软件。 时光机穿梭 命令: 总结: 版本回退 HEAD指...

  • Git命令总结

    根据廖雪峰老师Git教程的总结 Git教程 三棵树Git三棵树.png 配置与提交 时光机穿梭 远程仓库 注意:第...

  • git教程之时光机穿梭

    本系列教程来自廖雪峰的官方网站,现在搬运过来,目的帮助自己和小白学习收藏!附赠:常用git命令清单 目录 前言 版...

  • 03 git 时光机穿梭-查看状态

    git status 查看git状态 现在把工作区中的的readme.txt修改成 Git is a distri...

  • 07 git 时光机穿梭-撤销修改

    git checkout -- file 可以丢弃工作区的修改 今天你的老板突然说要使用svn来代替git,你的心...

  • 06 git 时光机穿梭-管理修改

    还是无耻copyhttp://www.liaoxuefeng.com/wiki/00137395163059296...

网友评论

      本文标题:git的时光穿梭

      本文链接:https://www.haomeiwen.com/subject/hihwkxtx.html