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 -> README
    modified:   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)

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
git 2.42.0 是Git的一个版本,它是Git版本控制系统在发布后的迭代更新。Git 是一个开源的分布式版本控制系统,用于跟踪文件的更改和协作开发。Git 2.42.0 提供了新的功能、改进和bug修复,使用户有更好的使用体验和更高的效率。 Git 2.42.0 的更新内容包括但不限于以下几点: 1. 性能提升:Git 2.42.0 在处理大规模代码仓库时的性能有所提升,加速了提交、克隆和合并等操作,减少了等待时间,提高了工作效率。 2. 新功能:Git 2.42.0 引入了一些新的功能,如增加了一种新的互动式 rebase 模式,使得代码重写更加灵活和方便。同时,还加入了新的配置选项和命令行参数,增强了用户自定义的能力。 3. 改进的用户界面:Git 2.42.0 对用户界面进行了改进,提供了更友好的命令行输出和提示信息,让用户更容易理解和操作。此外,还改进了分支和标签的展示方式,使代码管理更加直观明了。 4. Bug修复:Git 2.42.0 修复了一些在之前版本中存在的bug,提高了系统的稳定性和安全性。修复的bug涉及各个方面,如克隆、提交、分支合并等,保证了代码版本管理的准确性和一致性。 总结来说,Git 2.42.0 是Git版本控制系统的一个重要更新,旨在提供更好的性能、新功能以及改进的用户界面。用户可以通过升级到Git 2.42.0 来获得更好的代码管理和协作开发体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值