diff --git a/hgext/rebase.py b/hgext/rebase.py
index 12f3c7144a391f60229cfa83e53122bc9148dde0_aGdleHQvcmViYXNlLnB5..c8a97fa742b716573e8de3e82c3c6968e4537b79_aGdleHQvcmViYXNlLnB5 100644
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -530,4 +530,5 @@
     '''Commit the wd changes with parents p1 and p2. Reuse commit info from rev
     but also store useful information in extra.
     Return node of committed revision.'''
+    dsguard = cmdutil.dirstateguard(repo, 'rebase')
     try:
@@ -533,3 +534,2 @@
     try:
-        repo.dirstate.beginparentchange()
         repo.setparents(repo[p1].node(), repo[p2].node())
@@ -535,5 +535,4 @@
         repo.setparents(repo[p1].node(), repo[p2].node())
-        repo.dirstate.endparentchange()
         ctx = repo[rev]
         if commitmsg is None:
             commitmsg = ctx.description()
@@ -552,4 +551,5 @@
             repo.ui.restoreconfig(backup)
 
         repo.dirstate.setbranch(repo[newnode].branch())
+        dsguard.close()
         return newnode
@@ -555,8 +555,6 @@
         return newnode
-    except util.Abort:
-        # Invalidate the previous setparents
-        repo.dirstate.invalidate()
-        raise
+    finally:
+        release(dsguard)
 
 def rebasenode(repo, rev, p1, base, state, collapse, target):
     'Rebase a single revision rev on top of p1 using base as merge ancestor'
diff --git a/tests/test-largefiles-misc.t b/tests/test-largefiles-misc.t
index 12f3c7144a391f60229cfa83e53122bc9148dde0_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLW1pc2MudA==..c8a97fa742b716573e8de3e82c3c6968e4537b79_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLW1pc2MudA== 100644
--- a/tests/test-largefiles-misc.t
+++ b/tests/test-largefiles-misc.t
@@ -1017,7 +1017,7 @@
 
   $ hg -R no-largefiles -q pull --rebase
   Invoking status precommit hook
-  ? normal3
+  M normal3
 
 (test reverting)