diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/RefUpdateValidator.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/RefUpdateValidator.java
index dec6ae4..15e8602 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/RefUpdateValidator.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/validation/RefUpdateValidator.java
@@ -149,8 +149,7 @@
     }
   }
 
-  protected RefPair compareAndGetLatestLocalRef(
-      RefPair refPair, CloseableSet<AutoCloseable> locks)
+  protected RefPair compareAndGetLatestLocalRef(RefPair refPair, CloseableSet<AutoCloseable> locks)
       throws SharedLockException, OutOfSyncException, IOException {
     String refName = refPair.getName();
     EnforcePolicy refEnforcementPolicy = refEnforcement.getPolicy(projectName, refName);
@@ -163,12 +162,11 @@
         () -> sharedRefDb.lockRef(projectName, refName));
 
     RefPair latestRefPair = getLatestLocalRef(refPair);
-    boolean isInSync =
-        (latestRefPair.compareRef.getObjectId().equals(ObjectId.zeroId()))
-            ? !sharedRefDb.exists(projectName, refName)
-            : sharedRefDb.isUpToDate(projectName, latestRefPair.compareRef);
+    if (sharedRefDb.isUpToDate(projectName, latestRefPair.compareRef)) {
+      return latestRefPair;
+    }
 
-    if (!isInSync) {
+    if (isNullRef(latestRefPair.compareRef) || sharedRefDb.exists(projectName, refName)) {
       validationMetrics.incrementSplitBrainPrevention();
 
       softFailBasedOnEnforcement(
@@ -178,6 +176,10 @@
     return latestRefPair;
   }
 
+  private boolean isNullRef(Ref ref) {
+    return ref.getObjectId().equals(ObjectId.zeroId());
+  }
+
   private RefPair getLatestLocalRef(RefPair refPair) throws IOException {
     Ref latestRef = refDb.exactRef(refPair.getName());
     return new RefPair(
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/MultiSiteBatchRefUpdateTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/MultiSiteBatchRefUpdateTest.java
index 9b8b562..9acedef 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/MultiSiteBatchRefUpdateTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/MultiSiteBatchRefUpdateTest.java
@@ -126,7 +126,7 @@
   @Test
   public void executeAndFailsWithExceptions() throws IOException {
     setMockRequiredReturnValues();
-
+    doReturn(true).when(sharedRefDb).exists(A_TEST_PROJECT_NAME, A_TEST_REF_NAME);
     doReturn(false).when(sharedRefDb).isUpToDate(A_TEST_PROJECT_NAME, oldRef);
     try {
       multiSiteRefUpdate.execute(revWalk, progressMonitor, Collections.emptyList());
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/RefUpdateValidatorTest.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/RefUpdateValidatorTest.java
index d95860c..6fa7ed4 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/RefUpdateValidatorTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/RefUpdateValidatorTest.java
@@ -135,6 +135,7 @@
   @Test(expected = OutOfSyncException.class)
   public void validationShouldFailWhenLocalRefDbIsNotUpToDate() throws Exception {
     lenient().doReturn(true).when(sharedRefDb).isUpToDate(anyString(), any(Ref.class));
+    doReturn(true).when(sharedRefDb).exists(A_TEST_PROJECT_NAME, refName);
     doReturn(false).when(sharedRefDb).isUpToDate(A_TEST_PROJECT_NAME, localRef);
 
     refUpdateValidator.executeRefUpdate(refUpdate, () -> RefUpdate.Result.NEW);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/dfsrefdb/zookeeper/ZkSharedRefDatabaseIT.java b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/dfsrefdb/zookeeper/ZkSharedRefDatabaseIT.java
index 03f5c49..cfa5476 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/dfsrefdb/zookeeper/ZkSharedRefDatabaseIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/multisite/validation/dfsrefdb/zookeeper/ZkSharedRefDatabaseIT.java
@@ -16,6 +16,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import com.google.gerrit.acceptance.AbstractDaemonTest;
 import com.google.gerrit.metrics.DisabledMetricMaker;
@@ -138,6 +139,31 @@
     assertFalse(existsDataInZkForCommand(aNewCreate));
   }
 
+  @Test
+  public void shouldBeSuccessfulWhenRefIsRecreated() throws Exception {
+    ObjectId commitObjectIdOne = commitBuilder().add("test_file1.txt", "A").create().getId();
+    ObjectId commitObjectIdTwo = commitBuilder().add("test_file1.txt", "B").create().getId();
+
+    ReceiveCommand firstCommand =
+        new ReceiveCommand(ObjectId.zeroId(), commitObjectIdOne, A_TEST_REF_NAME);
+
+    ReceiveCommand deleteCommand =
+        new ReceiveCommand(commitObjectIdOne, ObjectId.zeroId(), A_TEST_REF_NAME, Type.DELETE);
+
+    ReceiveCommand secondCommand =
+        new ReceiveCommand(ObjectId.zeroId(), commitObjectIdTwo, A_TEST_REF_NAME);
+
+    InMemoryRepository repository = testRepo.getRepository();
+    try (RevWalk rw = new RevWalk(repository)) {
+
+      newBatchRefUpdate(repository, firstCommand).execute(rw, NullProgressMonitor.INSTANCE);
+      newBatchRefUpdate(repository, deleteCommand).execute(rw, NullProgressMonitor.INSTANCE);
+      newBatchRefUpdate(repository, secondCommand).execute(rw, NullProgressMonitor.INSTANCE);
+    }
+
+    assertTrue(existsDataInZkForCommand(secondCommand));
+  }
+
   private boolean existsDataInZkForCommand(ReceiveCommand firstCommand) throws Exception {
     return zkSharedRefDatabase.exists(A_TEST_PROJECT_NAME, firstCommand.getRefName());
   }
