diff --git a/hgext/strip.py b/hgext/strip.py
index 27822b8436bfb1dd1a394b77468ea9e67df678bd_aGdleHQvc3RyaXAucHk=..2bc978921e8a0ee570a5c44c6b54e955cfc3c4b1_aGdleHQvc3RyaXAucHk= 100644
--- a/hgext/strip.py
+++ b/hgext/strip.py
@@ -254,7 +254,7 @@
 
             # only reset the dirstate for files that would actually change
             # between the working context and uctx
-            descendantrevs = repo.revs(b"%d::.", uctx.rev())
+            descendantrevs = repo.revs(b"only(., %d)", uctx.rev())
             changedfiles = []
             for rev in descendantrevs:
                 # blindly reset the files, regardless of what actually changed
diff --git a/tests/test-strip.t b/tests/test-strip.t
index 27822b8436bfb1dd1a394b77468ea9e67df678bd_dGVzdHMvdGVzdC1zdHJpcC50..2bc978921e8a0ee570a5c44c6b54e955cfc3c4b1_dGVzdHMvdGVzdC1zdHJpcC50 100644
--- a/tests/test-strip.t
+++ b/tests/test-strip.t
@@ -1179,7 +1179,11 @@
 
 stripping a set containing a merge properly reset file content, including items on other branches
 
-BROKEN, The added file should move to unknown, which is the behavior we have been seeing for other `hg strip --keep` call.
+The added file is moved to unknown, which is the behavior we have been seeing for other `hg strip --keep` call.
+
+stripping a set containing a merge properly reset file content, including items on other branches
+
+The added file is moved to unknown, which is the behavior we have been seeing for other `hg strip --keep` call.
 
   $ hg unbundle -u $TESTTMP/issue4736/.hg/strip-backup/35358f982181-a6f020aa-backup.hg
   adding changesets
@@ -1260,7 +1264,4 @@
      summary:     commitA
   
 
-BROKEN: 'bar.txt' cannot possibly be clean since it is not part of the current
-working copy parents.
-
   $ hg status -A
@@ -1266,3 +1267,4 @@
   $ hg status -A
+  ? bar.txt
   C a
   C b
@@ -1267,6 +1269,5 @@
   C a
   C b
-  C bar.txt
   C foo.txt
   $ cat bar.txt
   bar