For developers who use Git for project management, they often encounter situations where they need to delete historical records. For example, if sensitive information is submitted or the law requires the removal of certain content. However, Git is designed to keep a record of all modifications, so deleting history is not an easy task. This article will introduce some methods to help you delete history records in Git.
You can use git reset
and git push
in Git commands to delete history records. First use the git log
command to view the history.
$ git log --oneline
This lists all commit records on the current branch, each with a SHA-1 identifier (first column) and a message (following columns).
Then, use the git reset
command to reset the current branch to before the commit you want to delete. For example, if you want to delete the last three commit records, you can use:
$ git reset HEAD~3
This will reset the current branch to the first three commit records, and the last three commits in the history will be deleted. .
Finally, use the git push -f
command to force push to the remote warehouse and overwrite the history. This can cause problems for others pulling updates, so you need to make sure everyone with permissions knows about this.
$ git push -f
When using this method to delete history, we recommend backing up the code base before executing, just in case.
Another powerful tool is BFG Repo-Cleaner. It is a Java program that can be run locally to delete history in a Git repository.
First, install BFG Repo-Cleaner. You can use Homebrew to install it on Mac:
$ brew install bfg
Or download it from the official website and install it on your computer:
$ wget http://search.maven.org/remotecontent?filepath=com/madgag/bfg/1.14.0/bfg-1.14.0.jar
Then, run the following command in the root directory of the Git repository (please make sure to delete it before Backup code base):
$ java -jar /path/to/bfg.jar --delete-files filename.txt.git $ git reflog expire --expire=now --all && git gc --prune=now --aggressive $ git push
where filename.txt.git
is the name of the file containing the content to be deleted (for example, .git-credentials
). Here BFG Repo-Cleaner is used to remove commit history, refs and tags, and then re-compress the repository.
It should be noted that BFG Repo-Cleaner can delete any content in the warehouse, so you need to operate with caution.
The last method is to create a new Git repository containing only the commit records you want to retain. This approach requires some manual work but preserves the integrity of the repository and does not affect other people's work on the repository.
First, create a new directory under the root directory of the original Git repository to save the new Git repository:
$ mkdir newrepo && cd newrepo
Then, copy the selective commit records of the original Git repository to the new In the directory:
$ git clone /path/to/oldrepo --depth 1 $ cd oldrepo && git log --oneline
This will copy the last commit record of the original Git repository to the new Git repository. Update the new repository's remote URL and push it to the remote repository.
$ git remote set-url origin git://new/repo.git $ git push -u origin master
This creates a new Git repository that only contains selectively committed records.
Summary
In Git, deleting history records is a sensitive issue and needs to be handled with caution. Use the git reset
command to delete some recent commit records. Use BFG Repo-Cleaner to delete the commit history of a specific file or folder. Finally, you can optionally preserve commit records by creating a new Git repository. Either way, you'll need to back up your codebase before deleting it, just in case.
The above is the detailed content of Help you delete history records in Git. For more information, please follow other related articles on the PHP Chinese website!