WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Git · Advanced · question 48 of 100

How do you use ’git filter-branch’ or ’git filter-repo’ to modify the history of a Git repository?

📕 Buy this interview preparation book: 100 Git questions & answers — PDF + EPUB for $5

Both ’git filter-branch’ and ’git filter-repo’ are used to modify the history of a Git repository, but they work in slightly different ways.

Using ’git filter-branch’

’git filter-branch’ is a built-in Git command that can be used to rewrite the history of a Git repository by applying a filter to each commit. This filter can be used to remove or modify files, change the author or committer information, or make any other changes to the commit history. The rewritten history can then be pushed to the remote repository, but it’s important to note that this can cause issues for other contributors who have based their work on the original history.

Here’s an example of how to use ’git filter-branch’ to remove a file from the commit history:

Change to the root directory of the repository:

    cd /path/to/repository

Backup the original repository in case something goes wrong:

    git clone . ../backup-repo

Run the ’git filter-branch’ command, specifying the filter to apply:

    git filter-branch --tree-filter 'rm -f path/to/file' HEAD

This command removes the file located at "path/to/file" from all commits in the history. The ’–tree-filter’ option specifies a shell command to apply to each commit.

Push the modified history to the remote repository:

    git push --force origin master

It’s important to use the ’–force’ option to overwrite the remote history with the modified history.

Using ’git filter-repo’

’git filter-repo’ is a newer, more powerful tool that was designed to replace ’git filter-branch’. It’s faster, easier to use, and can perform more complex operations than ’git filter-branch’. It’s also less likely to cause issues for other contributors, as it preserves the original commits by default.

Here’s an example of how to use ’git filter-repo’ to remove a file from the commit history:

Change to the root directory of the repository:

    cd /path/to/repository

Install ’git filter-repo’ if it’s not already installed:

    git clone https://github.com/newren/git-filter-repo
    export PATH="$PWD/git-filter-repo:$PATH"

Backup the original repository in case something goes wrong:

    git clone . ../backup-repo

Run the ’git filter-repo’ command, specifying the filter to apply:

    git filter-repo --path path/to/file

This command removes the file located at "path/to/file" from all commits in the history. The ’–path’ option specifies the file or directory to remove.

Push the modified history to the remote repository:

    git push --force origin master

It’s important to use the ’–force’ option to overwrite the remote history with the modified history.

In summary, ’git filter-branch’ and ’git filter-repo’ can be used to modify the history of a Git repository by applying a filter to each commit. ’git filter-branch’ can be used to remove or modify files, change the author or committer information, or make any other changes to the commit history. ’git filter-repo’ is a newer, more powerful tool that can perform more complex operations than ’git filter-branch’, while preserving the original commits by default. However, it’s important to use caution when modifying the history of a Git repository, as it can cause issues for other contributors who have based

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Git interview — then scores it.
📞 Practice Git — free 15 min
📕 Buy this interview preparation book: 100 Git questions & answers — PDF + EPUB for $5

All 100 Git questions · All topics