---
title: "Reliable, repeatable updates | Grafana Labs"
description: "How stable UIDs and Git Sync keep dashboards from duplicating"
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

## Same UID, same dashboard

A reliable pipeline produces the same result no matter how many times you regenerate and merge. For Git Sync, that depends on a stable **dashboard UID** in your Foundation SDK code.

When Git Sync pulls dashboard JSON, Grafana overwrites an existing dashboard that has the same `uid`. If the UID changes every run, you risk creating additional dashboards instead of updating one.

Go ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```go
builder := dashboard.NewDashboardBuilder("My Dashboard").
  Uid("my-dashboard") // Same UID = update, not a second dashboard
```

## What to expect after merge

| Situation                                 | What happens                                                                               |
|-------------------------------------------|--------------------------------------------------------------------------------------------|
| Same UID, updated JSON in the synced path | Git Sync updates the existing dashboard (Grafana overwrites the dashboard with that `uid`) |
| New UID in the synced path                | A new provisioned dashboard appears for that file                                          |

## Why the review gate still matters

CI that checks generated JSON on the pull request keeps the committed files honest. Reviewers see the JSON diff before merge. After merge, Git Sync applies what is in Git, so the reviewed files are what Grafana receives.
