add increment sync code
diff --git a/buildkite/pipelines/bazelci.py b/buildkite/pipelines/bazelci.py
index 3d2cb0d..1c959a5 100644
--- a/buildkite/pipelines/bazelci.py
+++ b/buildkite/pipelines/bazelci.py
@@ -134,7 +134,7 @@
       "macos":
       {
           "name": "macOS",
-          "agent-directory": "/usr/local/var/buildkite-agent/builds/${BUILDKITE_AGENT_NAME}/"
+          "agent-directory": "/Users/buchgr/citest"
       }
   }
 
@@ -229,10 +229,21 @@
   print("\n--- Fetching " + project_name + " sources")
   if os.path.exists(clone_path):
     os.chdir(clone_path)
+    fail_if_nonzero(execute_command(["git", "remote", "set-url", "origin", git_repository]))
+    fail_if_nonzero(execute_command(["git", "clean", "-fdqx"]))
+    fail_if_nonzero(execute_command(["git", "submodule", "foreach", "--recursive", "git", "clean", "-fdqx"]))
     # sync to the latest commit of HEAD. Unlikely git pull this also works after
     # a force push.
-    fail_if_nonzero(execute_command(["git", "fetch"]))
-    fail_if_nonzero(execute_command(["git", "reset", "HEAD", "--hard"]))
+    fail_if_nonzero(execute_command(["git", "fetch", "origin"]))
+    remote_head = subprocess.check_output(["git", "symbolic-ref", "refs/remotes/origin/HEAD"])
+    remote_head = remote_head.decode("utf-8")
+    remote_head = remote_head.rstrip()
+    fail_if_nonzero(execute_command(["git", "reset", remote_head, "--hard"]))
+    fail_if_nonzero(execute_command(["git", "submodule", "sync", "--recursive"]))
+    fail_if_nonzero(execute_command(["git", "submodule", "update", "--init", "--recursive", "--force"]))
+    fail_if_nonzero(execute_command(["git", "submodule", "foreach", "--recursive", "git", "reset", "--hard"]))
+    fail_if_nonzero(execute_command(["git", "clean", "-fdqx"]))
+    fail_if_nonzero(execute_command(["git", "submodule", "foreach", "--recursive", "git", "clean", "-fdqx"]))
   else:
     fail_if_nonzero(execute_command(["git", "clone", git_repository, clone_path]))