git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Christof Krüger" <git@christof-krueger.de>
To: Shantanu Pavgi <pavgi@uab.edu>
Cc: "git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: removing files from history but not filesystem
Date: Wed, 29 Jun 2011 08:08:27 +0200	[thread overview]
Message-ID: <1309327707.2417.49.camel@oxylap> (raw)
In-Reply-To: <D56E9579-BD93-42AC-BA45-E0DC20F4BB48@uab.edu>

Hi

> Thanks for the reply Chris. It worked for me. I am not following last
>  command "git reset <branch-name>" though. I have used SHA1 commit
>  object names in 'git reset' command, but I am not sure how <commit> is
>  using branch name here. Is  it because branch is a commit pointer in
>  the git history? 
While being on the master branch, issuing "git reset temp" tells git to
"let the master branch point to wherever the symbolic reference temp
points now".  
You did something very similar with git filter-branch already. There you
specified HEAD~1, which is the same as telling git to dereference the
symbolic ref "HEAD" and take its first parent. I don't know any place
where git wouldn't accept symbolic references instead of raw sha1 sums.

> Also, how do I specify rev-list HEAD-1 so that 'git rm' will be run on
>  all commits excepts latest commit? Following didn't work for me, so I
>  guess I am not following syntax here.
>  {{{ $ git filter-branch
>  --index-filter 'git rm --cached --ignore-unmatch apple' HEAD~1
> Which ref do you want to rewrite?
>  }}}
git filter-branch expects a symbolic reference within the rev-list. It
would be pointless to filter the commits without a symbolic reference
being bent over to point to the rewritten branch once done.

What you can do is the following:

git filter-branch --index-filter 'test $GIT_COMMIT =
35644cb5fa34e033593f6f0d27c332443b6867d8 || git rm --cached
--ignore-unmatch foo' HEAD

If "test $GIT_COMMIT = <sha1>" is true, the following git rm command
won't be executed for that commit. 
Choose the hash to be the one you want to skip (HEAD).

Another possible way would be to create a temporary branch to point at
HEAD^, filter-branch it, then add a graft to stitch the remaining commit
on top of it, then filter-branch HEAD and then remove the branch. But
this is a bit advanced for the case where you just want to omit one
commit.

Regards,
  Chris

  reply	other threads:[~2011-06-29  6:08 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-28  6:13 removing files from history but not filesystem Shantanu Pavgi
2011-06-28  7:04 ` Christof Krüger
2011-06-29  4:10   ` Shantanu Pavgi
2011-06-29  6:08     ` Christof Krüger [this message]
2011-06-29 16:57       ` Christof Krüger
2011-06-29 21:45       ` Shantanu Pavgi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1309327707.2417.49.camel@oxylap \
    --to=git@christof-krueger.de \
    --cc=git@vger.kernel.org \
    --cc=pavgi@uab.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).