# Question on git-filter-branch

6 messages from 2007-11-01 to 2007-11-01. Participants: Bill Lear, Mike Hommey, Alex Riesen.
Thread: https://gitlist.dev/t/10558

## Bill Lear, 2007-11-01 12:55

Subject: Question on git-filter-branch
Message-ID: <18217.52425.655322.52338@lisa.zopyra.com>
URL: https://gitlist.dev/e/18217.52425.655322.52338%40lisa.zopyra.com

```
In my repo, I have sensitive files A, C, and a directory full of
sensitive stuff I want to remove forever from the git repository.

% ls
A B C D sensitive_stuff

% git --version
git version 1.5.3.5

% git filter-branch --index-filter 'git update-index --remove A' HEAD
Rewrite 5dd7d5f2d7d3a5f43c242188ac96294628267673 (7/7)
Ref 'refs/heads/master' was rewritten

These refs were rewritten:
% ls
B  C  D  sensitive_stuff

% git status
# On branch master
nothing to commit (working directory clean)

Ok, so I guess it has done what I wanted.  So, I try to remove the
next file that has sensitive information in it:

% git filter-branch --index-filter 'git update-index --remove C' HEAD
Namespace refs/original/ not empty

And there I am stuck: what do I do now?

I did also try this (on a fresh clone of the original repo):

% git filter-branch --index-filter 'git update-index --remove A C sensitive_stuff/*' HEAD
Rewrite 5dd7d5f2d7d3a5f43c242188ac96294628267673 (7/7)
Ref 'refs/heads/master' was rewritten

These refs were rewritten:
% ls
B  D  sensitive_stuff/
% ls sensitive_stuff
E  F  G

So, that appears to have removed A and C, but it did nothing to the
files in the subdirectory.  Is there a way to remove the files in the
subdirectory --- or, better, to simply remove the entire subdirectory?

I did try reading the man page for this, and the first example is
essentially what I want.  It says "you will get the rewritten history
saved in HEAD", but I'm not sure what I'm supposed to do next.


Bill

```

## Mike Hommey, 2007-11-01 12:58

Subject: Re: Question on git-filter-branch
Message-ID: <20071101125845.GA27567@glandium.org>
URL: https://gitlist.dev/e/20071101125845.GA27567%40glandium.org
In-Reply-To: <18217.52425.655322.52338@lisa.zopyra.com>

```
On Thu, Nov 01, 2007 at 06:55:37AM -0600, Bill Lear wrote:
> In my repo, I have sensitive files A, C, and a directory full of
> sensitive stuff I want to remove forever from the git repository.
> 
> % ls
> A B C D sensitive_stuff
> 
> % git --version
> git version 1.5.3.5
> 
> % git filter-branch --index-filter 'git update-index --remove A' HEAD
> Rewrite 5dd7d5f2d7d3a5f43c242188ac96294628267673 (7/7)
> Ref 'refs/heads/master' was rewritten
> 
> These refs were rewritten:
> % ls
> B  C  D  sensitive_stuff
> 
> % git status
> # On branch master
> nothing to commit (working directory clean)
> 
> Ok, so I guess it has done what I wanted.  So, I try to remove the
> next file that has sensitive information in it:
> 
> % git filter-branch --index-filter 'git update-index --remove C' HEAD
> Namespace refs/original/ not empty

Just remove .git/refs/original/

Mike

```

## Bill Lear, 2007-11-01 13:19

Subject: Re: Question on git-filter-branch
Message-ID: <18217.53833.710503.667761@lisa.zopyra.com>
URL: https://gitlist.dev/e/18217.53833.710503.667761%40lisa.zopyra.com
In-Reply-To: <20071101125845.GA27567@glandium.org>

```
On Thursday, November 1, 2007 at 13:58:45 (+0100) Mike Hommey writes:
>On Thu, Nov 01, 2007 at 06:55:37AM -0600, Bill Lear wrote:
>> In my repo, I have sensitive files A, C, and a directory full of
>> sensitive stuff I want to remove forever from the git repository.
>> 
>> % ls
>> A B C D sensitive_stuff
>> 
>> % git --version
>> git version 1.5.3.5
>> 
>> % git filter-branch --index-filter 'git update-index --remove A' HEAD
>> Rewrite 5dd7d5f2d7d3a5f43c242188ac96294628267673 (7/7)
>> Ref 'refs/heads/master' was rewritten
>> 
>> These refs were rewritten:
>> % ls
>> B  C  D  sensitive_stuff
>> 
>> % git status
>> # On branch master
>> nothing to commit (working directory clean)
>> 
>> Ok, so I guess it has done what I wanted.  So, I try to remove the
>> next file that has sensitive information in it:
>> 
>> % git filter-branch --index-filter 'git update-index --remove C' HEAD
>> Namespace refs/original/ not empty
>
>Just remove .git/refs/original/

Ok, thanks.  But, how do I remove the subdirectory?

% rm -rf .git/refs/original
% git filter-branch --index-filter 'git update-index --remove sensitive_stuff' HEAD
Rewrite 6711f6a50605918326f67ca0c3402eab9a4c8571 (8/8)
WARNING: Ref 'refs/heads/master' is unchanged

% ls sensitive_stuff
E  F  G
% git filter-branch --index-filter 'git update-index --remove sensitive_stuff/*' HEAD
Rewrite 6711f6a50605918326f67ca0c3402eab9a4c8571 (8/8)
WARNING: Ref 'refs/heads/master' is unchanged

% ls sensitive_stuff
E  F  G

% cd sensitive_stuff
% git filter-branch --index-filter 'git update-index --remove E F G' HEAD
fatal: Not a git repository: '.git'
You need to run this command from the toplevel of the working tree.


Bill

```

## Mike Hommey, 2007-11-01 13:34

Subject: Re: Question on git-filter-branch
Message-ID: <20071101133440.GA17239@glandium.org>
URL: https://gitlist.dev/e/20071101133440.GA17239%40glandium.org
In-Reply-To: <18217.53833.710503.667761@lisa.zopyra.com>

```
On Thu, Nov 01, 2007 at 07:19:05AM -0600, Bill Lear wrote:
> >Just remove .git/refs/original/
> 
> Ok, thanks.  But, how do I remove the subdirectory?
> 
> % rm -rf .git/refs/original
> % git filter-branch --index-filter 'git update-index --remove sensitive_stuff' HEAD
> Rewrite 6711f6a50605918326f67ca0c3402eab9a4c8571 (8/8)
> WARNING: Ref 'refs/heads/master' is unchanged

git-update-index --remove will remove files, not trees, so you need to
use something like
git-ls-files ensitive_stuff | xargs -d "\n" git-update-index --remove
instead.

Mike

```

## Bill Lear, 2007-11-01 13:54

Subject: Re: Question on git-filter-branch
Message-ID: <18217.55984.327062.84306@lisa.zopyra.com>
URL: https://gitlist.dev/e/18217.55984.327062.84306%40lisa.zopyra.com
In-Reply-To: <20071101133440.GA17239@glandium.org>

```
On Thursday, November 1, 2007 at 14:34:41 (+0100) Mike Hommey writes:
>On Thu, Nov 01, 2007 at 07:19:05AM -0600, Bill Lear wrote:
>> >Just remove .git/refs/original/
>> 
>> Ok, thanks.  But, how do I remove the subdirectory?
>> 
>> % rm -rf .git/refs/original
>> % git filter-branch --index-filter 'git update-index --remove sensitive_stuff' HEAD
>> Rewrite 6711f6a50605918326f67ca0c3402eab9a4c8571 (8/8)
>> WARNING: Ref 'refs/heads/master' is unchanged
>
>git-update-index --remove will remove files, not trees, so you need to
>use something like
>git-ls-files ensitive_stuff | xargs -d "\n" git-update-index --remove
>instead.

Oh yeah, now we're cookin' with gas:

% git filter-branch --index-filter 'git-ls-files sensitive_stuff | xargs -d "\n" git-update-index --remove' HEAD
Rewrite 6711f6a50605918326f67ca0c3402eab9a4c8571 (8/8)
Ref 'refs/heads/master' was rewritten

These refs were rewritten:
blake^master ~*/sensitive.clone ls
B  D

Excellent.

Thanks for the help.


Bill

```

## Alex Riesen, 2007-11-01 14:20

Subject: Re: Question on git-filter-branch
Message-ID: <20071101142051.GB14475@steel.home>
URL: https://gitlist.dev/e/20071101142051.GB14475%40steel.home
In-Reply-To: <20071101133440.GA17239@glandium.org>

```
Mike Hommey, Thu, Nov 01, 2007 14:34:41 +0100:
> On Thu, Nov 01, 2007 at 07:19:05AM -0600, Bill Lear wrote:
> > >Just remove .git/refs/original/
> > 
> > Ok, thanks.  But, how do I remove the subdirectory?
> > 
> > % rm -rf .git/refs/original
> > % git filter-branch --index-filter 'git update-index --remove sensitive_stuff' HEAD
> > Rewrite 6711f6a50605918326f67ca0c3402eab9a4c8571 (8/8)
> > WARNING: Ref 'refs/heads/master' is unchanged
> 
> git-update-index --remove will remove files, not trees, so you need to
> use something like
> git-ls-files ensitive_stuff | xargs -d "\n" git-update-index --remove
> instead.

git ls-files -z sensitive_stuff | git update-index --remove -z --stdin

```
