git reset 命令详解(二)—— Git 学习笔记 08
git reset 命令详解(二)
上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法——后面跟一个路径(或文件)。
恢复索引中的文件到某个版本
假设版本库中是文件file.txt的V1版本,HEAD、Index和工作目录都和版本库一致。这时候修改了file.txt文件,并把它(V2版本)加入Index。如下图所示:
现在,运行 git reset file.txt
(这其实是 git reset --mixed HEAD file.txt
的简写形式),它会让索引看起来像 HEAD, 所以它本质上只是将 file.txt 从 HEAD 复制到索引中。如下图:
仔细对比这两幅图,你会发现 git reset file.txt
有 “取消暂存文件” 的实际效果。它和 git add 所做的事相反。这就是为什么 git status 命令的输出会建议运行此命令来取消暂存一个文件。例如:
$ git add *
$ git status
On branch master
Changes to be committed:(use "git reset HEAD <file>..." to unstage)renamed: README.md -> READMEmodified: CONTRIBUTING.md
另外,我们可以不让 Git 从 HEAD 拉取数据,而是通过具体指定一个提交来拉取该文件的对应版本。 我们只需运行类似于 git reset eb43bf file.txt
的命令即可。依然用图来说明:
以上是版本库、Index 和工作目录的状态。
现在,执行git reset eb43 file.txt
压缩提交(squashing commit)
假设你有一个项目,第一次提交中增加了文件 a,第二次提交增加了一个新的文件 b 并修改了 a,第三次提交再次修改了 a。如下图:
你发现第二次和第三次提交其实是增加了一个软件功能,把二者压缩成一次提交更合理。那么可以这样做:
首先,运行 git reset --soft HEAD~2
来将 HEAD 分支移动到一个旧一点的提交上(即你想要保留的最近一次提交):
然后,运行 git commit
现在你可以查看可到达的历史,即将会推送的历史,现在看起来有个 v1 版 file-a.txt 的提交,接着第二个提交将 file-a.txt 修改成了 v3 版并增加了 file-b.txt。 包含 v2 版本的文件已经不在历史中了。
参考资料
《Pro Git》(Scott Chacon, Ben Straub Version 2.1.14, 2018-05-19)
git reset 命令详解(二)—— Git 学习笔记 08相关推荐
- git reset 命令详解(一)—— Git 学习笔记 07
git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...
- git reset 命令详解 git revert命令详解。
git reset 命令详解 reset命令 介绍 参数 补救 git revert命令 revert说明 举例: 命令 reset命令 介绍 git reset 命令格式为: git reset [ ...
- git reset命令详解
开门见山,先抛出一张图,之后再细讲. 首先,先解释下图中的一些名词. 一.名词解释 1. Working Copy:当前工作目录下的文件,一般指,有修改,没有git add,没有git commi ...
- git checkout 命令详解—— Git 学习笔记 16
git checkout 命令详解 概览 git checkout 这条命令的常用格式如下: 用法一 git checkout [<commit>] [--] <paths> ...
- Git 常用命令详解
Git 常用命令详解 1. Git 常用命令 1.1 常用git 命令图表汇总 1.2 配置个人信息 1.3 创建版本库 1.4 常用Git命令汇总 2. Git 解决代码冲突 3. Git 分支管理 ...
- git add 回滚_Git的reset命令详解
git reset 这个命令是版本控制的精髓,非常实用且常用,真香警告! 一.为什么 我们玩闯关游戏的时候,经常要把游戏进度保存,以便我们随时能够回到那一刻.特别是打BOSS之前,做好保存,发现打不过 ...
- git 命令详解_再次学习Git版本控制工具
微信公众号:PHP在线 Git 究竟是怎样的一个系统呢?为什么在SVN作为版本控制工具已经非常流行的时候,还有Git这样一个版本控制工具呢?Git和SVN的区别在哪儿呢?Git优势又在哪呢?下面PHP ...
- git config设置用户名_一个神奇的工具,实现多人协作,git常用命令详解
git是一款开源的分布式版本控制工具,在世界上所有分布式版本控制工具中,git是最快.最简单.最流行的. git的作者是Linux之父:Linus Benedict Torvalds,当初开发git仅 ...
- git log 命令详解
git log 命令详解 git log 命令用于查看提交历史: git log [options] [<file> <commit> <tag>...] 如果不加 ...
最新文章
- Python 是一门动态的、强类型语言
- JavaScript学习总结(7)——JavaScript基础知识汇总
- linux curl https报错: curl: (35) SSL connect error
- BZOJ 2806 Luogu P4022 [CTSC2012]Cheat (广义后缀自动机、DP、二分、单调队列)
- apache开源项目--ApacheDS
- Prefix Sum Primes
- 推荐一款cpp解析json工具--rapidjson
- frexp 中文_带有Python示例的math.frexp()方法
- php timesheet,vue版本的timesheet图表
- 免费视频直播点播服务器系统,搭建一套完整的网络视频流媒体直播/点播服务系统需要具备哪些条件?...
- 终端/Shell 快捷键
- c语言的数组长度问题
- 我的电脑上的软件推荐
- loadrunner 打印变量
- Python常用中文分词库:jieba
- input输入框添加键盘事件
- 中国十大域名注册虚拟主机提供商排行榜
- 如何找到浏览器扩展的安装位置
- Android短彩信源码解析-短信发送流程(一)
- 合肥工业大学2020-2021学年《数据挖掘》实验报告(Python实现)