首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

BFG Repo-Cleaner - 快速清除Git提交历史中的特定文件

BFG Repo-Cleaner(快速清除Git提交历史中的特定文件) 有些时候不小心上传了一些敏感文件(例如密码), 或者不想上传的文件(没及时或忘了加到.gitignore里的),而且上传的文件又特别大的时候...的另一种选择 BFG是git-filter-branch之外的一种更简单、更快的方法,可以清除Git存储库历史中的不良数据: 删除 大文件 删除 密码、凭证 和其他 私人数据 git-filter-branch...默认情况下,HEAD分支是受保护的,虽然它的历史记录将被清除,但是最新的提交(这个'技巧')是protected commit(受保护的提交),它的文件层次结构将不会被改变。...如果某个坏的文件(比如10MB的文件,当您指定--strip-blobs-bigger-than 5M)在受保护的提交中,那么它不会被删除—它将保存在您的存储库中,即使BFG从以前的提交中删除了它。...请注意,尽管这些受保护的提交中的文件不会被更改,但是当这些提交从早期的脏提交继续进行时,它们的提交ids 将 更改,以反映更改的历史—只有文件系统树的SHA-1 id 将保持不变。 更快...

3K40

git 提交文件中的部分修改

概述 在 Git 提交一个文件的时候,有时候会在同一个文件中,包含两个不同功能的修改,或者一个功能完成了,而别的部分还没有完善不应该进入代码库,这时候如果使用git add file-name的话,会将这个文件中的所有更新都提交...针对这种场景,git 提供了更细粒度的提交命令git add -p,可以分部分提交一个文件中的更新代码块,实测能满足常见的需求。这里简要记录一下如何使用这个命令。 2....实现命令 2.1 原理解释 git 中用”hunk”来表示一个文件中邻近区域中的代码修改块,比如用git diff 查看修改时,两个@@符号分割的一个区域就是一个hunk,其中行首是-,颜色为红色的为删去的行...图片 需要注意的是,git有一套默认的将文件中所有修改分成不同hunk的机制,但我们也可以将默认机制分的太大的hunk分割为多个小的hunk,这样能更精确地控制提交的粒度。...部分提交文件修改的原理简单来说是将所有的修改分成不同的hunk,通过对每个hunk来进行是否提交的判断,从而完成我们的需求。具体命令下面详细讲述。

37620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Git删除暂存区或版本库中的文件

    打开你的项目文件夹,除了隐藏的.git文件夹,其他项目文件位于的地方便是工作区,工作区的文件需要添加到Git的暂存区(git add),随后再提交到Git的版本库(git commit)。...首次新建的文件都是untracked状态(未跟踪),此时需要git add到暂存区,Git便会在暂存区中生成一个该文件的索引,文件此时处于uncommited状态,需要git commit生成版本库。...删除错误添加到暂存区的文件 有时你在工作区新建了文件TestFile,并且已经将它添加到了暂存区,git会告知,现有有一个文件未提交到版本库,如下图: ?...上面的命令仅仅删除暂存区的文件而已,不会影响工作区的文件,如上图,TestFile.txt仍然存在,此时输入下面命令,git会告知有一个未跟踪的文件TestFile.txt。...//仅仅只是撤销已提交的版本库,不会修改暂存区和工作区 git reset --soft 版本库ID //仅仅只是撤销已提交的版本库和暂存区,不会修改工作区 git reset --mixed 版本库ID

    3.9K30

    git 在切换分支时有未提交的文件,怎么办? git stash

    situation 用git checkout切换本地分支从b1到b2时, 如果b1的本地文件有修改, 会发生冲突。...(b1和b2不在一个commit id上) 设b1和b2都有123.txt这个文件(这2个branch下123.txt文件内容可相同可不相同); 当前在b1下, 修改了一行123.txt, 然后想git...实际的应用场景是这样:假设你有分支master和develop。master用来release版本,develop用来开发。master上release了版本1,然后develop继续开发。...如果你在develop上开发到一半的时候,release的版本1发现了bug。这个时候,你develop分支有未提交的修改,然后你需要切换到master上的版本1进行修复。...这个时候切换到master分支,肯定是不需要把develop分支上的修改带过去的。

    3K20

    Git清理commit中历史提交的大文件

    文章时间:2019年11月10日 14:02:59 解决问题:清理Git中比较大的文件,主要针对历史记录进行清理 ps:因为Git可以恢复版本,所有历史提交过的较大的文件,也会被保存下来,所以我们需要...这里方法有两种,下面方法主要介绍了其中一种 查看目录下的文件的大小 git count-objects -v # 查看 git 相关文件占用的空间 du -sh .git # 查看 .git 文件夹占用磁盘空间...记一次删除Git记录中的大文件的过程:https://www.hollischuang.com/archives/1708 方法二 工具化(自动机枪) 工具名称:BFG 工具地址:https://rtyley.github.io...git repo,使用--mirror参数 git clone --mirror http://192.168.1.199:8099/hcses/hcses-warehouse.git 第三步 清除大文件...,实际上这些数据/文件并没有被直接删除,这时候需要使用git gc指令来清除。

    5.8K10

    程序员的20大Git面试问题及答案

    11.如何找到特定提交中已更改的文件列表?对于这个问题,不能仅仅是提供命令,还要解释这个命令究竟做了些什么。...要获取特定提交中已更改的列表文件,请使用以下命令:git diff-tree -r {hash}给定提交哈希,这将列出在该提交中更改或添加的所有文件。...版本库: 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:图中左侧为工作区,右侧为版本库。...或者 git checkout -- 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

    30710

    2022 最新 Git 面试题

    stash 会将你的工作目录,即修改后的跟踪文件和暂存的更改保存在一堆未完成的更改中,你可以随时 重新应用这些更改。 10.什么是git stash drop?...11.如何找到特定提交中已更改的文件列表? 对于这个问题,不能仅仅是提供命令,还要解释这个命令究竟做了些什么。...要获取特定提交中已更改的列表文件,请使用以下命令: git diff-tree -r {hash} 给定提交哈希,这将列出在该提交中更改或添加的所有文件。...或者 git checkout – 命令时,会用暂存区全部或指定的文件替换工作区的 文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。 当执行 git checkout HEAD ....这个命令也是极具危险性的,因为不但 会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

    22310

    Git中忽略文件提交、取消文件追踪的方式(多中方式)

    背景 使用Git进行版本管理多人协作开发,常会遇到我们本地可能存在一套自己的配置或者某些测试文件不需要提交到远端的情况。因此需要使用Git的相关命令进行文件排除或解除追踪。...然后参照方式一进行操作即可 3.文件已经纳入了Git管理,想取消文件追踪,本地更改不提交(适用于文件比较分散或同种类型文件时) 取消追踪 # 关闭跟踪文件,修改不提交 git update-index...# 恢复跟踪文件,修改提交 git update-index --no-assume-unchanged /xxx/xxx.java # 恢复追踪某个目录下的某种类型文件 git update-index...--no-assume-unchanged /xxx/*.yml 当关闭追踪文件多了时,想找出来进行提交,可以使用如下命令: # 列出关闭追踪的文件 git ls-files -v | grep '^...| awk '{print $2}' |xargs git update-index --no-assume-unchanged 未经允许不得转载:肥猫博客 » Git中忽略文件提交、取消文件追踪的方式

    2.8K20

    git介绍

    在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。...很难丢失数据 你执行的 Git 操作,几乎只往 Git 数据库中添加数据。 你很难让 Git 执行任何不可逆操作,或者让它以任何方式清除数据。虽然未提交更新时有可能丢失或弄乱修改的内容。...已暂存(staged) 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。 已提交(committed) 表示数据已经安全地保存在本地数据库中。...这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。 暂存区:是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。...将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。 3. 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。 如果Git目录中保存着特定版本的文件,就属于已提交状态。

    37340

    GIT 常用快捷命令

    GIT 常用命令 功能 命令 添加文件/更改到暂存区 git add filename 添加所有文件/更改到暂存区 git add ....–list 查看文件列表 git ls-files 比较工作区和暂存区 git diff 比较暂存区和版本库 git diff –cached 比较工作区和版本库 git diff HEAD 从暂存区移除文件...tag [tagname] 清除未跟踪文件 git clean 可选项: 选项 含义 -q, –quiet 不显示删除文件名称 -n, –dry-run 试运行 -f, –force 强制删除 -i,...–interactive 交互式删除 -d 删除文件夹 -e, –exclude 忽略符合 的文件 -x 清除包括 .gitignore 里忽略的文件 -X 只清除 .gitignore 里忽略的文件...patch 将未添加到暂存区的更改生成 patch 文件: git diff > demo.patch 将已添加到暂存区的更改生成 patch 文件: git diff --cached > demo.patch

    1.3K10

    Git教程

    您可以修改的内容和提交更改作为新的提交到仓库。 4)、暂存区(Staging area) 暂存区是工作区用来提交更改(commit)前可以暂存工作区的变化。 ?...结果: foo.htm文件的状态为untracked(未跟踪),提示通过git add可以暂存 GIT在这一点做得很好,在输出每个文件状态的同时还说明了怎么操作,像上图就有怎么暂存、怎么跟踪文件、怎么取消暂存的说明...移除所有未跟踪文件 #移除所有未跟踪文件 #一般会加上参数-df,-d表示包含目录,-f表示强制清除。 git clean [options] 示例: ? ?...或者 “git checkout — ” 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改 动。

    1.4K20

    Git 程序员篇

    git add 暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。...git checkout 或者 git checkout – 暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。...这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。...检查工作区 当工作区新增加了文件,或者原有的文件有改变时,启动 Git GUI 后会自动显示在未暂存文件列表中。...) 查看提交历史: $ git log   # 查看提交历史 $ git log -p   # 查看指定文件的提交历史 $ git blame   # 以列表方式查看指定文件的提交历史

    1.1K21

    git 入门教程之基本概念 原

    第一,暂存区的概念允许将本地文件的更改添加进来,也就是说本地文件的更改只有添加到暂存区才能进行下一步的提交更改,所以说那些更改添加到暂存区是由开发者本人决定的,这其实有了一定灵活性,并不是所有的更改都需要被记录...第二,暂存区作为中间过程,暂存区的内容是打算提交更改的内容,也就是说暂存区可以视为一种临时缓存,用来记录预提交更改.实际工作中,新功能的开发并不是一蹴而就的,是由一系列的更改一起组成的,如果将这些更改分散开来单独提交...所以,git add 命令作用是将需要提交的更改文件临时放到暂存区中,然后执行git commit 命令就可以一次性将暂存区的所有内容提交到当前分支. $ git commit -m "understand...,而对象的 id会被记录到暂存区的文件索引(index)中. git commit 提交文件 暂存区的目录树写入到对象库(objects),master 分支的目录树自动更新. git reset HEAD...检出文件 HEAD 指针指向的 master 分支中的文件替换暂存区以及工作区文件,注意:不仅清除工作区未提交的改动,连暂存区未提交的改动也会被清除!

    42240

    你可能不太会用的10个Git命令

    以下是常见的用法: git reset –-hard HEAD——撤销最近提交以来暂存区和非暂存区的改动。 指定不同的提交而不是 HEAD,以撤销自这条提交以来的更改。...--hard 指的是撤销暂存区和非暂存区的更改。 要确保你撤销的不是协作伙伴所依赖的远程分支的提交。 git checkout my commit——从 my_commit 中撤销非暂存区的改动。...例如,也许你运行的代码在版本库中创建了许多你不需要的不同类型的文件。你可以一键清除它们! Git clean –n——删除本地工作目录中的未追踪文件。 –n 表示试运行,在试运行中什么都不会删除。...-f 表示实际删除文件。 -d 表示删除未追踪的目录。 默认情况下不会删除 .gitignore 中的未追踪文件,但这种行为是可以更改的。...现在你已经知道了 Git 中用于撤销操作的命令,接下来我们再看两条可以有序排列文件的命令。 整理 Git commit –amend——将暂存区的更改添加到最近一次提交中。

    71220

    git学习总结02 — 版本控制

    如下图,硬重置不保留已提交的修改,直接将当前分支的状态恢复到某个特定提交下,同时将当前工作区和暂存区中的文件全部移除。 [reset-hard.gif] 3....远程版本还原 revert reset 适用于本地库中的版本控制,然而远程分支只能使用 revert 在不修改分支历史的前提下,还原某次提交引入的更改,并创建一个包含已还原更改的新提交记录。...常见场景操作 场景1:工作区某文件内容改错,想直接丢弃工作区的修改时: $ git checkout -- [file name] 场景2.1:改错的文件添加到了暂存区,未提交版本库,想清除暂存区的修改...场景2.2:改错的文件添加到了暂存区,未提交版本库,想直接清除本地所有修改时: # 清空暂存区,清空工作区 $ git reset --hard HEAD 等同于 场景2.1 + 场景1。...:文件删除前提交过本地库 # 方式1:通过 checkout 丢弃指定文件在工作区的修改以恢复(可以恢复为暂存区中的文件) $ git checkout -- [file name] # 方式2:通过

    1K107

    如何在 Git 中取消暂存文件?

    在使用Git进行版本控制时,我们经常需要将文件添加到暂存区(stage)以便提交更改。...本文将详细介绍如何在Git中取消暂存文件的方法,以帮助您管理版本控制过程中的文件更改。图片1. 查看暂存文件状态在取消暂存文件之前,首先我们需要了解哪些文件已经被暂存。...可以使用以下命令查看暂存文件的状态:git status执行以上命令后,Git会显示已暂存和未暂存的文件列表,以及其他相关的状态信息。2....取消暂存的同时撤销修改有时候我们希望取消暂存的同时也撤销对文件的修改,将文件恢复到上一次提交的状态。可以使用以下命令:git restore 文件名>替换文件名>为要取消暂存和撤销修改的文件名。...确认取消暂存结果取消暂存文件后,可以再次使用git status命令确认文件的状态是否已正确更新。取消暂存的文件应该不再显示在暂存区中,且状态应该被修改为"未暂存的更改"。8.

    2.8K00

    Git 使用

    当工作区文件发生修改时,将工作区中文件的时间戳和大小,与 index 中记录的文件时间戳和大小进行比较,可以快速的判断工作区文件是否发生了更改,然后再具体的进行工作区文件内容与 objects 中记录文件内容进行比较...使用上面的 git init 命令生成仓库时,工作目录中的所有文件都是未跟踪状态,从远程仓库克隆生成本地仓库时,工作目录中的所有文件都是已跟踪状态。...git status git status 命令用于查看文件的状态,未跟踪文件只有一种状态:文件未跟踪,或者称为未纳入暂存区,状态显示为 Untracked files。...after_merge 此时的合并方式为 Fast-forward 方式,因为只需要更改分支的指向,所以速度较快,且不会产生新的提交记录。 ?...同理, --mixed 级别也会清除暂存区的修改,所以版本回退过程中,需要注意选择恰当的回退方式。

    76220

    Git常用命令汇总篇(附使用详细介绍)

    · git add -u 会将所有已经被Git跟踪并且被修改(但还没有被staged)的文件添加到暂存区中。它不会添加新的文件(未被Git跟踪的文件)。...这不会从暂存列表中移除该暂存,所以可以多次应用它。 · git stash pop 在应用暂存修改后,它会从暂存列表中删除这个暂存。这样做的好处是,不需要再去手动清理暂存列表。...需要指定要删除的暂存的名称,如stash@{0}。 · git stash clear 用于清除所有的暂存。这是一个危险的操作,因为一旦执行,所有的暂存都将被永久删除,无法恢复。...--hard参数表示强制回退,会删除所有未提交的本地修改。 · git reset --hard commit_id 用于将代码库回退到指定的版本。...· git rm -r --cached 文件/文件夹名字 (. 忽略全部文件) 从Git的跟踪列表中移除文件或文件夹,但不会删除物理文件。

    52640
    领券