diff --git a/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java b/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java
index cb36aaa..52cf29e 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/automerger/DownstreamCreatorIT.java
@@ -144,6 +144,7 @@
   @Test
   public void testDiamondMerge() throws Exception {
     Project.NameKey manifestNameKey = defaultSetup();
+    ObjectId initial = repo().exactRef("HEAD").getLeaf().getObjectId();
     // Create initial change
     PushOneCommit.Result initialResult = createChange("subject", "filename", "echo Hello");
     // Project name is scoped by test, so we need to get it from our initial change
@@ -152,13 +153,18 @@
     createBranch(BranchNameKey.create(projectName, "right"));
     initialResult.assertOkStatus();
     merge(initialResult);
+    ObjectId masterWithMergedChange = repo().exactRef("HEAD").getLeaf().getObjectId();
     // Reset to create a sibling
-    ObjectId initial = repo().exactRef("HEAD").getLeaf().getObjectId();
     testRepo.reset(initial);
     // Make left != right
     PushOneCommit.Result left =
         createChange(
-            testRepo, "left", "subject", "filename", "echo \"Hello asdfsd World\"", "randtopic");
+            testRepo,
+            "left",
+            "subject",
+            "filename-left",
+            "echo \"Hello asdfsd World\"",
+            "randtopic");
     left.assertOkStatus();
     merge(left);
 
@@ -169,6 +175,7 @@
     createBranch(BranchNameKey.create(projectName, "bottom"));
     pushDiamondConfig(manifestNameKey.get(), projectName);
     // After we upload our config, we upload a new patchset to create the downstreams
+    testRepo.reset(masterWithMergedChange);
     PushOneCommit.Result result =
         createChange(testRepo, "master", "subject", "filename2", "echo Hello", "sometopic");
     result.assertOkStatus();
@@ -471,6 +478,7 @@
   @Test
   public void testDownstreamMergeConflict() throws Exception {
     Project.NameKey manifestNameKey = defaultSetup();
+    ObjectId initial = repo().exactRef("HEAD").getLeaf().getObjectId();
     // Create initial change
     PushOneCommit.Result result = createChange("subject", "filename", "echo Hello");
     // Project name is scoped by test, so we need to get it from our initial change
@@ -480,7 +488,6 @@
     result.assertOkStatus();
     merge(result);
     // Reset to create a sibling
-    ObjectId initial = repo().exactRef("HEAD").getLeaf().getObjectId();
     testRepo.reset(initial);
     // Set up a merge conflict between master and ds_one
     PushOneCommit.Result ds1Result =
@@ -534,6 +541,7 @@
   @Test
   public void testRestrictedVotePermissions() throws Exception {
     Project.NameKey manifestNameKey = defaultSetup();
+    ObjectId initial = repo().exactRef("HEAD").getLeaf().getObjectId();
     // Create initial change
     PushOneCommit.Result result = createChange("subject", "filename", "echo Hello");
     // Project name is scoped by test, so we need to get it from our initial change
@@ -543,7 +551,6 @@
     result.assertOkStatus();
     merge(result);
     // Reset to create a sibling
-    ObjectId initial = repo().exactRef("HEAD").getLeaf().getObjectId();
     testRepo.reset(initial);
     // Set up a merge conflict between master and ds_one
     PushOneCommit.Result ds1Result =
@@ -855,6 +862,7 @@
   public void testContextUser_mergeConflictOnDownstreamVotesOnTopLevel() throws Exception {
     // Branch flow for contextUser is master -> ds_one -> ds_two
     Project.NameKey manifestNameKey = defaultSetup();
+    ObjectId initial = repo().exactRef("HEAD").getLeaf().getObjectId();
     // Create initial change
     PushOneCommit.Result initialResult = createChange("subject", "filename", "echo Hello");
     // Project name is scoped by test, so we need to get it from our initial change
@@ -866,7 +874,7 @@
     merge(initialResult);
 
     // Reset to create a sibling
-    ObjectId initial = repo().exactRef("HEAD").getLeaf().getObjectId();
+    testRepo.reset(initial);
     PushOneCommit.Result ds1Result =
         createChange(
             testRepo, "ds_one", "subject", "filename", "echo \"Hello asdfsd World\"", "randtopic");
