Purge a file from history

GitGitBeginner
Practice Now

This tutorial is from open-source community. Access the source code

Introduction

Git is a popular version control system that allows developers to track changes in their codebase. However, sometimes it becomes necessary to completely remove a file from the repository's history. This lab will guide you through the process of purging a file from Git's history.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("`Git`")) -.-> git/DataManagementGroup(["`Data Management`"]) git/DataManagementGroup -.-> git/filter("`Apply Filters`") subgraph Lab Skills git/filter -.-> lab-12747{{"`Purge a file from history`"}} end

Purge a file from history

Suppose you accidentally committed a file containing sensitive information, such as API keys or passwords, to your Git repository. You realize that this file should never have been committed and want to completely remove it from the repository's history. However, simply deleting the file and committing the change will not remove it from the repository's history. The file will still be accessible in previous commits, which could pose a security risk.

To complete this lab, you will use the Git repository git-playground from your GitHub account, which comes from a fork of https://github.com/labex-labs/git-playground.git. This repository contains a file named file1.txt that should never have been committed. Please purge file1.txt from the repository's history, follow these steps:

  1. Clone the repository to your local machine:
git clone https://github.com/your-username/git-playground
  1. Use the following commands to navigate to the directory and configure the identity:
cd git-playground
git config --global user.name "your-username"
git config --global user.email "your-email"
  1. Delete the file from the repository's index.
git rm --cached --ignore-unmatch file1.txt
  1. Commit this change with the commit message "Remove sensitive file1.txt":
git commit -m "Remove sensitive file1.txt"
  1. Rewrite the repository's history, removing all instances of file1.txt:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch file1.txt" --prune-empty --tag-name-filter cat -- --all
  1. Force push the changes to the remote repository:
git push origin --force --all

After completing these steps, file1.txt will be completely removed from the repository's history and after running git log --remotes, you will not see the commit on file1.txt.

Summary

Purging a file from Git's history is a necessary step when sensitive information has been accidentally committed. This lab has guided you through the process of purging a file from Git's history using the git filter-branch command. Remember to use caution when rewriting a repository's history, as it can have unintended consequences.

Other Git Tutorials you may like