> ## Documentation Index
> Fetch the complete documentation index at: https://code.storage/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# deleteNote()

> Remove a note from a commit.

Git notes allow you to attach metadata to commits without modifying the commit itself. Notes are
removed from `refs/notes/commits` by default. Pass `ref` to delete the note from another notes ref.

See [Git Notes](/docs/guides/git-notes) for notes ref rules and write behavior.

<CodeGroup>
  ```typescript TypeScript theme={null} theme={"theme":{"light":"github-light","dark":"min-dark"}}
  const result = await repo.deleteNote({
    sha: 'abc123def456...',
    ref: 'reviews', // optional
    author: { name: 'Cleanup Bot', email: 'cleanup@example.com' },
    expectedRefSha: currentNotesRefSha, // optional optimistic lock
  });

  console.log(`Note deleted, new ref: ${result.newRefSha}`);
  ```

  ```python Python theme={null} theme={"theme":{"light":"github-light","dark":"min-dark"}}
  result = await repo.delete_note(
      sha="abc123def456...",
      ref="reviews",  # optional
      author={"name": "Cleanup Bot", "email": "cleanup@example.com"},
      expected_ref_sha=current_notes_ref_sha,  # optional optimistic lock
  )

  print(f"Note deleted, new ref: {result['new_ref_sha']}")
  ```

  ```go Go theme={null} theme={"theme":{"light":"github-light","dark":"min-dark"}}
  // Delete a git note
  result, err := repo.DeleteNote(context.Background(), storage.DeleteNoteOptions{
  	SHA: "abc123def456",
  	Ref: "reviews", // optional
  	Author: &storage.NoteAuthor{
  		Name:  "Cleanup Bot",
  		Email: "cleanup@example.com",
  	},
  	ExpectedRefSHA: currentNotesRefSHA,
  })
  fmt.Printf("Note deleted, new ref: %s", result.NewRefSHA)
  ```
</CodeGroup>

## Options

<ParamField path="sha" type="string" required>
  Commit SHA to remove the note from
</ParamField>

<ParamField path="ref" type="string">
  Notes ref to delete the note from. Accepts short names like `reviews`, `notes/reviews`, or full
  refs like `refs/notes/reviews`; all are normalized to a full `refs/notes/*` ref. Defaults to
  `refs/notes/commits`. Go: `Ref`.
</ParamField>

<ParamField path="author" type="string">
  Author signature (`name` and `email`)
</ParamField>

<ParamField path="expectedRefSha" type="string">
  Expected SHA of the target notes ref for optimistic concurrency control
</ParamField>

<ParamField path="ttl" type="string">
  Token TTL. Token TTL in seconds.
</ParamField>

<ParamField path="refPolicies" type="object[]">
  Ordered per-ref policy rules (`{ pattern, ops? }`) embedded in the per-call JWT. Evaluated against the target notes ref. Python: `ref_policies`. Go: `RefPolicies` with type `storage.RefPolicyList`. See the [Branch Protection guide](/docs/guides/branch-protection).
</ParamField>

## Response

<ResponseField name="sha" type="string">
  The commit SHA the note was attached to
</ResponseField>

<ResponseField name="targetRef" type="string">
  The canonical notes ref that was updated
</ResponseField>

<ResponseField name="baseCommit" type="string">
  Previous notes ref commit SHA
</ResponseField>

<ResponseField name="newRefSha" type="string">
  New notes ref SHA after the operation
</ResponseField>

<ResponseField name="result" type="object">
  Operation result with `success`, `status`, and optional `message`
</ResponseField>
