diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -5112,7 +5112,13 @@ def pull(ui, repo, source="default", **o
 
         if revs:
             try:
-                revs = [other.lookup(rev) for rev in revs]
+                oldrevs = revs
+                revs = [] # actually, nodes
+                for r in oldrevs:
+                    node = other.lookup(r)
+                    revs.append(node)
+                    if r == checkout:
+                        checkout = node
             except error.CapabilityError:
                 err = _("other repository doesn't support revision lookup, "
                         "so a rev cannot be specified.")
@@ -5122,7 +5128,7 @@ def pull(ui, repo, source="default", **o
                                  force=opts.get('force'),
                                  bookmarks=opts.get('bookmark', ())).cgresult
         if checkout:
-            checkout = str(repo.changelog.rev(other.lookup(checkout)))
+            checkout = str(repo.changelog.rev(checkout))
         repo._subtoppath = source
         try:
             ret = postincoming(ui, repo, modheads, opts.get('update'), checkout)
diff --git a/tests/test-pull-r.t b/tests/test-pull-r.t
--- a/tests/test-pull-r.t
+++ b/tests/test-pull-r.t
@@ -101,4 +101,44 @@ This used to abort: received changelog g
 
   $ hg pull -qr 1 ../repo
 
+Test race condition with -r and -U (issue4707)
+
+We pull '-U -r <name>' and the name change right after/during the changegroup emission.
+We use http because http is better is our racy-est option.
+
+
+  $ echo babar > ../repo/jungle
+  $ cat <<EOF > ../repo/.hg/hgrc
+  > [hooks]
+  > outgoing.makecommit = hg ci -Am 'racy commit'; echo committed in pull-race
+  > EOF
+  $ hg -R ../repo serve -p $HGPORT2 -d --pid-file=../repo.pid
+  $ cat ../repo.pid >> $DAEMON_PIDS
+  $ hg pull --rev default --update http://localhost:$HGPORT2/
+  pulling from http://localhost:$HGPORT2/
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files (+1 heads)
+  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg log -G
+  @  changeset:   2:effea6de0384
+  |  tag:         tip
+  |  parent:      0:bbd179dfa0a7
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     add bar
+  |
+  | o  changeset:   1:ed1b79f46b9a
+  |/   user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     change foo
+  |
+  o  changeset:   0:bbd179dfa0a7
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     add foo
+  
+
   $ cd ..