Git 删除Github历史记录

Git 删除历史记录

create-time:2018-11-28 22:15:36

Content

  • 1.问题引入
  • 2.解决方案
  • 3.方案实现
  • 备注

1.问题引入

本地git push 时不小心将写有敏感信息(包括但不限于密码、账号)推送到了GitHub上。

即使在本地使用git rm --cache file_name 清除了文件,但是在GitHub 的commit 历史记录上还是能够看到相关的文件及其信息。

我们希望能达到的目的是,清除有关敏感信息的一切信息(外界看不到敏感信息),而不影响其他信息。

2.解决方案

  • 使用BFG工具能够实现快速的清除。可惜,我还是没有看懂怎样使用,使用没有成功。BFG安装请参看 备注。

  • git filter-branch 命令。以下使用此命令解决。

3.方案实现

使用git filter-branch 实现清除相关文件以及commit历史记录

注意:请先本地备份清除的文件,此命令同样会删除本地仓库文件,最好直接备份仓库

# 备份本地仓库
cp repo_directory_name new_directory_name

# 进入本地仓库目录
cd repo_directory_name

# 清除文件以及commit历史
# filename 使用相对路径。直接 仓库文件名称,绝对路径报错:文件在仓库之外
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch filename' --prune-empty --tag-name-filter cat -- --all

过滤本地敏感文件提交(可选)

将文件名加入到.gitignore文件中,以后提交时,会被过滤掉,防止以后再次将敏感数据提交到代码仓库中

echo file_name >> .gitignore

删除GitHub上仓库(可选)

为了防止GitHub网站索引文件, 可以通过网页上删除该仓库,重新建立一个仓库。

提交

git push origin +master
# git push origin --force --all

备注

BFG 安装

BFG 依赖于JAVA 开发环境,需要安装JAVA开发环境。

# 查看是否存在JAVA环境
java

# 查看JAVA环境文件
apt-cache search jdk

# 安装JAVA环境
sudo apt-get install default-jdk -y

# 查看JAVA 版本,验证JAVA环境
java --version
java 
# 下载BFG, 网址在BFG网站上复制
# wget 下载的文件,就在 执行wget的当前目录
wget http://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar

# 压缩文件(Ubuntu 上红色字体文件),grep 无法直接 管道查看。
# 请直接使用  ls -a
ls -a

你可能感兴趣的:(git,github)