代码版本库中的历史记录对于跟踪项目代码的变化来说,是非常重要的。通常的情况是一但代码提交进版本库,就成为了版本库的历史记录,而这些记录可以被追踪,不应该被篡改
。
但在很极端的情况下,你可能需要篡改这个库的历史。比如说你不小心把冠希哥的照片提交进了版本库,而你的老板正好是冠希哥的粉丝。这时你肯定不想用正常的手段把文件中目录中删掉,然后再提交回版本库,因为这样的话历史记录还是会存在的,要是哪天你老板审察这段历史的话,会真相大白的。所以你可能会要想办法把已经提交上去的历史擦除掉。
不过当你要做篡改历史这种事的时候,要牢记以下几点:
- 篡改历史是一个很恶心的行为,被人知道后晚上会来找你的
- 篡改历史是或多或少要付出代价的
- 篡改历史可能会失败的,真相说不定哪天就会回归
-
篡改历史只能寄托于非常特定的条件
,不像某朝的法律那样说改就改的
对于要篡改GIT这种分布式、非线性的版本库的历史来说,情况会很复杂,条件限制会很多。特别是在涉及到多人开发的环境,要想偷偷地篡改历史而不被别人发现,成功率是很低的。
下面先说第一种最好的情况,要是符合以下全部条件:
- 文件刚刚提交进版本库(只涉及到最近的一次或几次提交)
- 之后再没有继续提交任何的东西
- 也没有把提交的东西合并到任何其它本地的分支
-
更没有同步到任何远程的版本库
很好,趁坏事还没出门,立马封杀+和谐:
git reset --hard HEAD~1
这会删除当前分支最近的一次提交的所有东西,包括历史记录和所涉及到的文件改动。要删除最近三次提交的话,就把上面命令中的1换成3,以此类推。要是说提交的东西同步到了本地的其它分支,也是切换到那个分支,按着这个流程走一次就行。这是最成功的一种情况,只要坏事不出门,一切都好办。
接着是一种比较坏的情况,就是你把东西同步到远程了。这下你想要篡改成功的话,必须眼明手快,机不可失。条件如下:
- 文件刚刚提交进版本库(只涉及到最近的一次或几次提交)
- 之后再没有继续提交任何的东西
- 刚提交的已经同步到远程的版本库中的一个分支
-
但是同步过去的东西还没有被其它人下载
这种情况下,先按上面的如法泡制一次,然后覆盖掉远程的历史:
git reset --hard HEAD~1
git push --force origin master
这里的例子假设你是要覆盖名叫origin的远程库上的master分支。
但实际上很可能的情况是,你同步到运程之后,有其它人下载了你的改动了。这个时候,基本杯具,除非你知道具体是谁,然后让他们提交自己的改动之前,按上面的做法删除记录,否则是很难办的。因为他们已经有了你之前提交的东西,并且再提交自己的改动,然后在下次同步到远程的时候,会把你删掉的东西重新发到远程上。这叫天网灰灰,疏而不漏。要是改动被很多人下载了的话,还是乖乖地用普通的reset吧
本文提及的属于软件工程中的邪术,不到事关重大时不应该随便乱用。
分享到:
相关推荐
对资源的描述: Git是一个分布式版本控制系统,它允许多个开发者在各自的本地仓库上进行代码修改,并通过提交(commit)来记录变更。通过分支(branch)机制,开发者可以在不影响主线(main branch)的情况下进行特性开发...
Git版本控制管理
Git版本控制流程,介绍如何使用Git做版本控制,以及项目中的实际应用
专辑:http://download.csdn.net/user/ajlgl/album 百度云:https://pan.baidu.com/s/1dESLQY9 Git下载地址:https://git-for-windows.github.io/
6.6: 版本控制 、 Git基础 、 Git进阶 、 RPM打包 、 总结和答疑.docx
git版本控制介绍,现在git已经基本取代svn来做版本控制
delphi最新的xe系列支持版本控制功能,可以和git完美结合,本文档简单介绍了如何在delphi seattle中配置并使用git版本控制软件。
版本控制Git-1.9.0客户端。git 版本控制 客户端 64位 1.9.0
版本控制工具:Git 后端技术:Spring + SpringMVC + MyBatis(SSM) 前端框架:LayUI 基于SSM+Layui的图书管理系统 技术栈 数据库:MySQL 开发工具:IDEA 数据连接池:Druid Web容器:Apache Tomcat 项目管理工具:...
git版本控制基础教程
git版本控制器,用于团队合作开发,用于保存代码在码云上
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Torvalds 开始着手开发 Git 是...
git版本控制使用说明,git版本控制使用说明,git版本控制使用说明
在本地初始化一个Git仓库:git init 从远程仓库克隆 :git clone [url] 本地仓库命令: git status:查看文件状态 git add [文件名]:将文件的修改加入暂存区 git reset [文件名]:将暂存区的文件取消暂存,或者切换...
目前支援版本: 8.7.0 至 Release 下載 strings.json 取代檔案 Windows: %LOCALAPPDATA%\gitkraken\app-8.7.0\resources\app.asar.unpacked\src\strings.json Mac: /Applications/GitKraken.app/Contents/Resources/...
git版本控制器,windows 64位系统
从git上下载太慢了,整整下了一中午,在此分享给大家,有用的拿去 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个...
针对于idea集成git版本控制系统,方便开发人员更好的控制代码的版本