16

Per accident I committed twice because I forgot to add two files. Can I remove a specific commit from the log?

screenshot of log

I want to delete commit № 4.

1

5 Answers 5

17

The simple answer is "no", because Subversion doesn't know how to resolve the case when you add a commit, someone else updates their checkout, and then you remove the commit from history. There might or might not be a complex answer involving surgery on the Subversion storage.

Sign up to request clarification or add additional context in comments.

Comments

5
  1. AFAICS, you have not delete r4, but merge with r5, yes?
  2. In general, SVN commit history is immutable, as Sii said - and if you haven't rights delete/create repo - you can't do anything.

If you can delete current repo and create new with new history, you can try:

  • svnadmin dump for getting human-readable (barely, I have to say) repository-dump, grok format and edit dump, delete repo, svnadmin load to recreate the repo
  • another idea is (instead of editing dump) another SCM, which has a bridge to SVN (hg+MQ (histedit)+hg-git, f.e, will allow you to get repo and fold/delete changesets). For replacing old repository - see p.2 above

Comments

2

In your case, it's just necessary to modify the commit comment associated with commit #4 to reflect the actual changes you made. You can do that with Subversion by modifying the SVN repository configuration. See the Subversion FAQ.

Comments

1

For anyone actually trying to do this and you have write access to the filesystem the repo is on this is the procedure that works IF it's the current last commit:

rm [repo root dir]/revprops/###/###### rm [repo root dir]/revs/###/###### vi [repo root dir]/db/current decrement rev number by 1 

Where ### is the first few numbers of the revision and ###### is the full rev number.

Comments

-2

Why? Let Subversion keep the history - that's what it's for. Check in early and often. There's no need to erase commit #4.

4 Comments

Because I didn't add Site.cc and Site.hh (I forgot to do that), but the commit message says I did.
@WTP: The canonical solution is just committing a ninjafix and commenting it accordingly. If you want a "neat", one-commit-per-work-package history, Subversion (or Subversion alone) might not be the right tool for that.
If you did a clean check out of the project, would those two files appear? If yes, then you did commit them. Believe Subversion.
Well the proper solution in this particular case is to modify the commit message after it was committed.