`
liuming
  • 浏览: 166919 次
  • 性别: Icon_minigender_1
  • 来自: 蛮夷之地
社区版块
存档分类
最新评论

版本控制的邪术:在特定条件下擦除GIT历史

Git 
阅读更多

代码版本库中的历史记录对于跟踪项目代码的变化来说,是非常重要的。通常的情况是一但代码提交进版本库,就成为了版本库的历史记录,而这些记录可以被追踪,不应该被篡改

 

但在很极端的情况下,你可能需要篡改这个库的历史。比如说你不小心把冠希哥的照片提交进了版本库,而你的老板正好是冠希哥的粉丝。这时你肯定不想用正常的手段把文件中目录中删掉,然后再提交回版本库,因为这样的话历史记录还是会存在的,要是哪天你老板审察这段历史的话,会真相大白的。所以你可能会要想办法把已经提交上去的历史擦除掉。

 

不过当你要做篡改历史这种事的时候,要牢记以下几点:

  • 篡改历史是一个很恶心的行为,被人知道后晚上会来找你的
  • 篡改历史是或多或少要付出代价的
  • 篡改历史可能会失败的,真相说不定哪天就会回归
  • 篡改历史只能寄托于非常特定的条件 ,不像某朝的法律那样说改就改的

 

对于要篡改GIT这种分布式、非线性的版本库的历史来说,情况会很复杂,条件限制会很多。特别是在涉及到多人开发的环境,要想偷偷地篡改历史而不被别人发现,成功率是很低的。

 

下面先说第一种最好的情况,要是符合以下全部条件:

  • 文件刚刚提交进版本库(只涉及到最近的一次或几次提交)
  • 之后再没有继续提交任何的东西
  • 也没有把提交的东西合并到任何其它本地的分支
  • 更没有同步到任何远程的版本库

很好,趁坏事还没出门,立马封杀+和谐:

git reset --hard HEAD~1

这会删除当前分支最近的一次提交的所有东西,包括历史记录和所涉及到的文件改动。要删除最近三次提交的话,就把上面命令中的1换成3,以此类推。要是说提交的东西同步到了本地的其它分支,也是切换到那个分支,按着这个流程走一次就行。这是最成功的一种情况,只要坏事不出门,一切都好办。

 

接着是一种比较坏的情况,就是你把东西同步到远程了。这下你想要篡改成功的话,必须眼明手快,机不可失。条件如下:

  • 文件刚刚提交进版本库(只涉及到最近的一次或几次提交)
  • 之后再没有继续提交任何的东西
  • 刚提交的已经同步到远程的版本库中的一个分支
  • 但是同步过去的东西还没有被其它人下载

这种情况下,先按上面的如法泡制一次,然后覆盖掉远程的历史:

git reset --hard HEAD~1
git push --force origin master

这里的例子假设你是要覆盖名叫origin的远程库上的master分支。

 

但实际上很可能的情况是,你同步到运程之后,有其它人下载了你的改动了。这个时候,基本杯具,除非你知道具体是谁,然后让他们提交自己的改动之前,按上面的做法删除记录,否则是很难办的。因为他们已经有了你之前提交的东西,并且再提交自己的改动,然后在下次同步到远程的时候,会把你删掉的东西重新发到远程上。这叫天网灰灰,疏而不漏。要是改动被很多人下载了的话,还是乖乖地用普通的reset吧

 

本文提及的属于软件工程中的邪术,不到事关重大时不应该随便乱用。

1
1
分享到:
评论
1 楼 zhangthe9 2012-03-29  
我就喜欢邪恶的

相关推荐

    Git版本控制管理 第2版.pdf.zip

    Git的版本控制特性允许团队成员在不同的分支上独立工作,然后将更改合并到主分支,确保代码的一致性和稳定性。Git flow是一种常见的Git工作流模式,它定义了明确的分支策略,包括开发分支、特性分支、发布分支和热...

    版本控制工具git、

    Git是一款强大的分布式版本控制系统,由Linux之父Linus Torvalds在2005年创建,主要用于源代码管理。它的设计目标是速度、数据完整性以及支持分布式开发模式。Git不仅适用于开源项目,也广泛应用于企业内部的软件...

    Git安装包:Git-2.31.1-32-bit

    版本控制:是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统 分布式版本控制工具 -- 分布式版本控制工具:如git,客户端取的不是最新的文件快照,而是把代码仓库完整的镜像下来到本地库(克隆/备份)

    git客户端 版本控制器

    Git由Linux之父Linus Torvalds在2005年创建,旨在提供一个高效、分布式且易用的版本控制系统,用于管理和追踪代码的变化历史。 Git的核心功能包括: 1. 分布式版本控制:每个开发者的本地机器都有完整的代码库副本...

    git版本控制器

    Git是一款强大的分布式版本控制系统,由Linus Torvalds在2005年为Linux内核开发而创建。它被广泛应用于软件开发,特别是在开源社区,因为它提供了高效、可靠的代码管理和协作功能。Git允许团队成员各自在本地工作,...

    版本控制Git-1.9.0客户端

    Git是世界上最先进的分布式版本控制系统,尤其在软件开发领域被广泛使用。版本控制系统的存在使得开发者可以追踪代码的历史变更,协作开发,并能轻松回溯到任何历史版本。Git-1.9.0是Git的一个重要版本,它提供了...

    版本控制工具git

    Git是一款分布式版本控制系统,由林纳斯·托瓦兹(Linus Torvalds)为了帮助管理Linux内核开发而创建。它的设计目标是速度、数据完整性以及支持非线性开发模式,使得开发者可以在本地进行大量的工作,然后将更改推送...

    Git windows版本64

    Windows版的Git提供了对Windows操作系统的原生支持,让开发者能够在Windows环境下方便地使用Git进行代码版本控制。"Git Windows版本64"指的是适用于Windows 64位系统的Git最新版本。这通常意味着它能够充分利用64位...

    git版本控制介绍

    除了上述基础操作外,还有一些进阶技巧可以帮助开发者更高效地使用Git: - **撤销更改**:使用`git revert`或`git reset`命令可以撤销不必要的提交。 - **重构历史**:通过`git rebase`命令,可以将一系列提交重新...

    Git软件版本控制.pdf

    在随后的年份中,Git因其优越的性能、速度以及对分布式开发的天然支持,迅速成为了开源社区和私有软件开发中使用最为广泛的版本控制系统之一。 版本控制系统是一种记录一个或多个文件内容变化,以便将来查阅特定...

    git 32位 版本控制

    Git是一款强大的分布式版本控制系统,尤其在软件开发领域中被广泛使用。它允许团队成员协作开发项目,跟踪每个改动,合并代码,并确保数据的一致性和完整性。对于32位操作系统用户,Git同样提供了支持,尽管现在64位...

    Git使用教程

    Git 是一个分布式版本控制系统,能够记录每次文件的改动,并且允许多人协作编辑。以下是 Git 使用教程的知识点总结: 一、Git 简介 * Git 是什么?Git 是目前世界上最先进的分布式版本控制系统。 * Git 的特点:...

    Git 版本控制 张果 Coding 教学 详细 清晰 VS

    Git是一款分布式版本控制系统,由林纳斯·托瓦兹在2005年为管理Linux内核开发而设计。它的核心理念是追踪项目源代码的变化,让开发者能够方便地记录和回溯每一次修改,同时支持多人协作开发。张果Coding的教学视频以...

    git版本控制学习

    **Git** 是一个开源的分布式版本控制系统,用于跟踪在软件开发过程中对文件的修改。它最初由Linus Torvalds于2005年创建,目的是为了更高效地管理Linux内核的源代码。 #### 二、创建版本库 在开始使用Git之前,...

    git版本控制工具

    Git是一款强大的分布式版本控制系统,由Linus Torvalds在2005年为Linux内核开发,后来被广泛应用到各种软件开发项目中。标题“git版本控制工具”指的是Git在软件开发中的作用,即帮助开发者追踪和管理代码的版本变化...

    《Git版本控制管理(第2版)》

    ### Git版本控制管理(第2版)核心知识点详解 #### 一、Git简介与特性 - **起源与发展**:Git最初是由Linux内核的主要开发者Linus Torvalds于2005年创建,目的是为了更好地管理和跟踪Linux内核源代码的变化。随着...

    版本控制工具Git的使用方法.docx

    版本控制工具 Git 的使用方法 版本控制是软件工程中一个至关重要的概念,它记录文件内容随时间的变化,以便查阅特定时间版本修订情况。版本控制的发展经历了几个阶段和方法,包括通过复制整个项目目录的方式来保存...

    Git 从入门到精通:版本控制实战指南

    Git的简介和历史:介绍了Git的起源,如何从一个为Linux内核项目设计的版本控制系统演变而来,并与集中式版本控制系统(如SVN)进行对比。 Git的工作原理:讲解了Git的分布式版本控制系统的特点,包括本地仓库与远程...

    idea集成git版本控制

    2. **初始化Git**: 右键点击项目根目录,选择“Git” -> “Repository” -> “Create Repository Here”,这样就会在项目根目录下创建一个隐藏的`.git`文件夹,用于存储版本控制信息。 ##### 第二步:将本地目录...

    Git版本控制器管理工具

    Visual Studio是微软推出的强大开发环境,支持多种编程语言,包括C#、VB.NET等,因此“Git版本控制器管理工具_.net版”可能是指在.NET框架下使用Git的特定插件或工具。 Git的核心特性包括: 1. 分布式:每个开发者...

Global site tag (gtag.js) - Google Analytics