diff --git a/tests/fixtures/zuul.conf b/tests/fixtures/zuul.conf
index 916cddd..6df15c0 100644
--- a/tests/fixtures/zuul.conf
+++ b/tests/fixtures/zuul.conf
@@ -11,3 +11,4 @@
 [zuul]
 layout_config=layout.yaml
 git_dir=/tmp/zuul-test/git
+push_change_refs=true
diff --git a/zuul/merger.py b/zuul/merger.py
index 2719346..aa640e5 100644
--- a/zuul/merger.py
+++ b/zuul/merger.py
@@ -84,12 +84,13 @@
 class Merger(object):
     log = logging.getLogger("zuul.Merger")
 
-    def __init__(self, trigger, working_root):
+    def __init__(self, trigger, working_root, push_refs):
         self.trigger = trigger
         self.repos = {}
         self.working_root = working_root
         if not os.path.exists(working_root):
             os.makedirs(working_root)
+        self.push_refs = push_refs
 
     def addProject(self, project, url):
         try:
@@ -145,19 +146,20 @@
                 self.log.info("Unable to merge %s" % change)
                 return False
 
-        # Push the results upstream to the zuul ref
-        for project, branches in projects.items():
-            repo = self.getRepo(project)
-            for branch in branches:
-                ref = 'refs/zuul/' + branch + '/' + target_ref
-                try:
-                    repo.push(ref, ref)
-                    complete = self.trigger.waitForRefSha(project, ref)
-                except:
-                    self.log.exception("Unable to push %s" % ref)
-                    return False
-                if not complete:
-                    self.log.error("Ref %s did not show up in repo" % ref)
-                    return False
+        if self.push_refs:
+            # Push the results upstream to the zuul ref
+            for project, branches in projects.items():
+                repo = self.getRepo(project)
+                for branch in branches:
+                    ref = 'refs/zuul/' + branch + '/' + target_ref
+                    try:
+                        repo.push(ref, ref)
+                        complete = self.trigger.waitForRefSha(project, ref)
+                    except:
+                        self.log.exception("Unable to push %s" % ref)
+                        return False
+                    if not complete:
+                        self.log.error("Ref %s did not show up in repo" % ref)
+                        return False
 
         return True
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index 4ef7fea..3f0289a 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -163,7 +163,11 @@
             merge_root = self.config.get('zuul', 'git_dir')
         else:
             merge_root = '/var/lib/zuul/git'
-        self.merger = merger.Merger(self.trigger, merge_root)
+        if self.config.has_option('zuul', 'push_change_refs'):
+            push_refs = self.config.getboolean('zuul', 'push_change_refs')
+        else:
+            push_refs = False
+        self.merger = merger.Merger(self.trigger, merge_root, push_refs)
         for project in self.projects.values():
             url = self.trigger.getGitUrl(project)
             self.merger.addProject(project, url)
