diff --git a/mercurial/discovery.py b/mercurial/discovery.py
index 740b1b4c79586e9a9ab21a2a1d3c3f3bc2f6678c_bWVyY3VyaWFsL2Rpc2NvdmVyeS5weQ==..ba959f6e10f8b582b0d60a092dd144baa9de1414_bWVyY3VyaWFsL2Rpc2NvdmVyeS5weQ== 100644
--- a/mercurial/discovery.py
+++ b/mercurial/discovery.py
@@ -131,7 +131,7 @@
 
     return og
 
-def checkheads(repo, remote, outgoing, remoteheads, newbranch=False):
+def checkheads(repo, remote, outgoing, remoteheads, newbranch=False, inc=False):
     """Check that a push won't add any outgoing head
 
     raise Abort error and display ui message as needed.
@@ -190,5 +190,5 @@
         # Construct {old,new}map with branch = None (topological branch).
         # (code based on _updatebranchcache)
         oldheads = set(h for h in remoteheads if h in cl.nodemap)
-        newheads = oldheads.union(outg)
+        newheads = oldheads.union(outgoing.missing)
         if len(newheads) > 1:
@@ -194,5 +194,5 @@
         if len(newheads) > 1:
-            for latest in reversed(outg):
+            for latest in reversed(outgoing.missing):
                 if latest not in newheads:
                     continue
                 minhrev = min(cl.rev(h) for h in newheads)
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
index 740b1b4c79586e9a9ab21a2a1d3c3f3bc2f6678c_bWVyY3VyaWFsL2xvY2FscmVwby5weQ==..ba959f6e10f8b582b0d60a092dd144baa9de1414_bWVyY3VyaWFsL2xvY2FscmVwby5weQ== 100644
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -1635,7 +1635,8 @@
                     # something to push
                     if not force:
                         discovery.checkheads(self, remote, outgoing,
-                                             remoteheads, newbranch)
+                                             remoteheads, newbranch,
+                                             bool(inc))
 
                     # create a changegroup from local
                     if revs is None and not outgoing.excluded: