撤销暂存文件与任意切换文件版本-天天三分钟玩转Git (7)

分享后端开发和云计算必备相关技术,道尽程序员小熊与老板的爱恨情仇,同名公众号:编程三分钟 回复【 资源 】能够得到程序员必备技能图谱、数百本热门编程电子书籍。mysql

产品说这个功能咱们不要了。——编程三分钟git

有时候咱们想把暂存区的文件取出来。程序员

1、暂存区到工做区

假如咱们刚刚执行了git reset --soft或者add等的操做,把一些东西加到了咱们的暂存区,好比日志文件,咱们就要把他们从暂存区拿出来。sql

  • git status 查看暂存区,里面有一个mysql.log被放进去了
  • git reset -- mysql.logmysql.log取出来
  • git status能够看到真的取出来了 而后若是不要想这个文件的话再rm掉就好啦,可是若是这些文件每次自动生成都要用这种方式取出暂存区真的好累,咱们能够用 git忽略不想提交的文件(后续技巧篇详细描述)

2、回滚文件到某个提交

当咱们想要把某个文件任意的回滚到某次提交上,而不改变其余文件的状态咱们要怎么作呢? 咱们有两种状况,一种是,只是想在工做区有修改的文件,直接丢弃掉他如今的修改;第二种是想把这个文件回滚到之前的某一次提交。咱们先来讲第一种编程

1. 取消文件在工做区的修改

  • 更新time.txt的内容,能够status看到他发生了变化
  • git checkout -- time.txt , 取消此次在工做区的修改,若是他已经被add加到了暂存区,那么这个命令就没有用了,他的意思是取消本次在工做区的修改,去上一次保存的地方。若是没有add就回到和版本库同样的状态;若是已经加到了暂存区,又作了修改,那么就回加到暂存区后的状态

2. 将文件回滚到任意的版本

咱们这里说的把文件回滚到之前的某个版本的状态,完整的含义是保持其余文件的内容不变,改变这个文件到之前的某个版本,而后修改到本身满意的样子和作下一次的提交。后端

核心命令bash

git checkout [<options>] [<branch>] -- <file>...复制代码

咱们仍是用time.txt这个文件来作试验,先搞三个版本出来,在这里我已经搞好了,来看看:云计算

版本1,time.txt内容00:50spa

版本2,time.txt内容18:513d

版本3,time.txt内容10:41

如今的是版本1,咱们把版本3检出试试。达到下图的状态

  • 使用checkout+commit id+-- filename的组合,横跨版本2把历史版本3的time.txt搞出来了
  • 查看状态,time.txt被改变了

咱们来把time.txt恢复到版本1,一样的方法,由于版本1是上一次提交咱们能够省略掉版本号

看到了吧!只要用git checkout commit_id -- filename的组合,想搞出哪一个文件历史版本就搞出哪一个。

到了这里,你可能会很懵比,resetcheckout命令真的好像啊!均可以用来作撤消

  • checkout语义上是把什么东西取出来,因此此命令用于从历史提交(或者暂存区域)中拷贝文件到工做目录,也可用于切换分支。
  • reset语义上是从新设置,因此此命令把当前分支指向另外一个位置,而且有选择的变更工做目录和索引。也用来在从历史仓库中复制文件到索引,而不动工做目录。

小小小小结

取出暂存区的文件:git reset -- 文件名

取消此次在工做区的修改: git checkout -- 文件名

把文件回滚到之前的某个版本的状态:git checkout+commit id+-- filename


还想不通能够在下方留言哦!

明明我赚钱那么难…为何人家赚个人钱那么容易


只要有一我的能得到帮助,小熊就会继续努力

喜欢就让咱们一块儿玩耍吧

相关文章
相关标签/搜索