diff --git a/dvc/command/experiments.py b/dvc/command/experiments.py index b908e505e..ebe84c15d 100644 --- a/dvc/command/experiments.py +++ b/dvc/command/experiments.py @@ -155,7 +155,11 @@ def _sort_exp(experiments, sort_by, typ, reverse): ret = OrderedDict() def _sort(item): - _, exp = item + rev, exp = item + tip = exp.get("checkpoint_tip") + if tip and tip != rev: + # Sort checkpoint experiments by tip commit + return _sort((tip, experiments[tip])) for fname, item in exp.get(typ, {}).items(): if isinstance(item, dict): item = flatten(item) diff --git a/dvc/repo/experiments/show.py b/dvc/repo/experiments/show.py index 7d66b2aeb..c5d8f3332 100644 --- a/dvc/repo/experiments/show.py +++ b/dvc/repo/experiments/show.py @@ -110,7 +110,12 @@ def show( ) # collect reproduced experiments - for exp_branch in repo.experiments.scm.list_branches(): + for head in sorted( + repo.experiments.scm.repo.heads, + key=lambda h: h.commit.committed_date, + reverse=True, + ): + exp_branch = head.name m = repo.experiments.BRANCH_RE.match(exp_branch) if m: rev = repo.scm.resolve_rev(m.group("baseline_rev"))