diff --git a/dvc/repo/experiments/executor/local.py b/dvc/repo/experiments/executor/local.py index d45a4ed22..f9ff8dce0 100644 --- a/dvc/repo/experiments/executor/local.py +++ b/dvc/repo/experiments/executor/local.py @@ -90,6 +90,11 @@ class TempDirExecutor(BaseLocalExecutor): head = EXEC_BRANCH if branch else EXEC_HEAD self.scm.checkout(head, detach=True) merge_rev = self.scm.get_ref(EXEC_MERGE) + + for ref in (EXEC_HEAD, EXEC_MERGE, EXEC_BASELINE): + if scm.get_ref(ref): + scm.remove_ref(ref) + try: self.scm.merge(merge_rev, squash=True, commit=False) except _SCMError as exc: diff --git a/tests/unit/repo/experiments/queue/test_local.py b/tests/unit/repo/experiments/queue/test_local.py index e24d3a92a..8d38af002 100644 --- a/tests/unit/repo/experiments/queue/test_local.py +++ b/tests/unit/repo/experiments/queue/test_local.py @@ -5,6 +5,8 @@ from celery import shared_task from flaky.flaky_decorator import flaky from dvc.repo.experiments.exceptions import UnresolvedExpNamesError +from dvc.repo.experiments.executor.local import TempDirExecutor +from dvc.repo.experiments.refs import EXEC_BASELINE, EXEC_HEAD, EXEC_MERGE def test_shutdown_no_tasks(test_queue, mocker): @@ -104,3 +106,17 @@ def test_celery_queue_kill(test_queue, mocker): spy = mocker.patch.object(test_queue.proc, "kill") test_queue.kill("bar") assert spy.called_once_with(mock_entry.stash_rev) + + +def test_queue_clean_workspace_refs(git_dir, tmp_dir): + + rev = git_dir.scm.get_rev() + exec_heads = (EXEC_MERGE, EXEC_BASELINE, EXEC_HEAD) + for ref in exec_heads: + git_dir.scm.set_ref(ref, rev) + + temp_dir_executor = TempDirExecutor(str(tmp_dir), str(tmp_dir), rev) + temp_dir_executor.init_git(git_dir.scm) + + for ref in exec_heads: + assert git_dir.scm.get_ref(ref) is None