# Commit message style guide

The [Git project provides guidelines](https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project),
including how to compose commit messages.
When writing a commit message, follow these additional guidelines:

+   [Add a required tag and optional subtag(s).](#add-required-tag)
+   [Add a paragraph.](#add-paragraph)
+   [Add an associated bug.](#add-bug)
+   [Optionally indicate multiple steps.](#indicate-multiple-steps)
+   [Add tests and run them automatically multiple times.](#add-tests)
+   [Add a buffer line before the Change-Id.](#add-buffer)
+   [Use Change-Id to refer to related changes](#use-change-id)

## Add required tag {#add-required-tag}

The required `[tag]` helps readers of the commit tell what subject your change is
about. The format is simply a keyword between brackets, for example, `[docs]`. The
keyword has no specific meaning, but should help readers identify the subject
easily. More specific tags or multiple tags can also be used to specify more
fine-grained subjects, for example,`[docs][fidl]`.
The following example shows required tags in the commit message subject:

```none {:.devsite-disable-click-to-copy}
[parent][component] Update component in Fuchsia

Write the details of a commit message here.

Bug: <issue-tracker-ID>

Test: Added test X.
```

You can view the commit history of the files you've edited to check for the tags
used previously. See these examples:

*   [https://fuchsia-review.googlesource.com/c/fuchsia/+/441776](https://fuchsia-review.googlesource.com/c/fuchsia/+/441776){:.external}
*   [https://fuchsia-review.googlesource.com/c/topaz/+/114013](https://fuchsia-review.googlesource.com/c/topaz/+/114013){:.external}

Commit message tags are required. If the subject of a commit message
doesn't include tags, Gerrit flags your
change with `Needs Label: Commit-Message-has-tags`.

## Add paragraph {#add-paragraph}

The paragraph underneath the header line describes in better detail what the
reason for the change is, and in general brief terms describe what it is
intended to do,
[for example](https://fuchsia-review.googlesource.com/c/fuchsia/+/569681):

```none {:.devsite-disable-click-to-copy}
[docs] Adding Fuchsia Commit message style guide

This change centralizes all commit message style guide into one style
guide. It also removes duplicate content from existing pages and points
to the new style guide instead.

Change-Id: I307e5b24df4273661d22c52c81038de50600c76c
```

## Add bug {#add-bug}

If you want Fuchsia Gerrit to know what issue this change is associated with,
you need to add the `Bug: <issue-tracker-ID>` line. To associate multiple issues
with a change, list each bug in a separate line. For example:

```none {:.devsite-disable-click-to-copy}
[parent][component] Update component in Fuchsia

Write the details of a commit message here.

Bug: 82657
Bug: 82658

Test: Added test X.
```

The difference between `Bug:` and `Fixed:` is that `Fixed:` automatically closes
the issue for you once your change is submitted, whereas `Bug:` only comments on
your issue once submitted. If you have multiple changes attached to your issue, use
the `Bug:` tag for all the changes up until the final change. Use `Fixed:` on
the final change, so that the issue is closed.

## Indicate multiple steps {#indicate-multiple-steps}

When executing a change that requires multiple steps across various repositories
(for instance, to soft transition APIs defined in one repository and used in
others), indicate multiple steps by referencing the last step taken and the next
step taken.

This enables reviewers and those looking at the log to understand and navigate
the totality of the change. When possible, it is encouraged to provide all steps
to complete the migration in each commit log (but that may be impractical in
some cases).

Here's an example of a [commit
message](https://fuchsia-review.googlesource.com/c/fuchsia/+/423314) with
multiple steps:

```none {:.devsite-disable-click-to-copy}
[fidl][go] Support for flexible enums (1/3)

Step 1 of 3. Adds support for flexible enums to fidlgen_go:

* For all enums, emit `IsUnknown()` method indicating whether the
  value is unknown (or known). While relevant only for flexible enums,
  it is possible to construct unknown strict enums using type casts.
* Emit an internal method `I_EnumIsStrict` indicating whether the enum
  is strict or flexible. This method is read by the runtime, when
  creating enum marshaler.
* For flexible enums, we generate a default unknown placeholder

Step 2: I1102f244aa5ab4545fab21218c1da90be08604ec
Step 3: If0a047a4db804a183e984676217b31e17b4af0ea

Test: fx test fidl_go_conformance at If0a047a4db804a183e984676217b31e17b4af0ea

Change-Id: Id71eb879e4d7dfabe228cc7b4e2fedb7f52db7b7
```

## Add tests and multiply line {#add-tests}

The `Test:` line is necessary to indicate what type of test to run to make sure
your change is working. You can add multiple different tests in this line, for
example, `fx test setui_service_tests, setui_client_interface_test`. You can
also add explanations of what tests you added below. If you did not add or
modify tests, you can specify `None:`, with an explanation of why it doesn't need
to be tested, for example, `None: documentation change only`.

If you added new tests, you can get deflake runs automatically by adding the
`Multiply:` line with the test to run multiple times.

The following example shows `Test:` and `Multiply:` in the [commit
message](https://fuchsia-review.googlesource.com/c/fuchsia/+/537303):

```none {:.devsite-disable-click-to-copy}
[SetUI] Correct internal items' visibility Part II

This CL marks some internal items with pub(crate), pub(super) or leaves
as private. Related CL: fxr/535942

Bug: 72941
Test: fx test -o setui_service_tests setui_client_interface_test
sample-setui-config-test setting-service-config-test
Multiply: setui_service_tests
Multiply: setui_client_interface_test

Change-Id: I67e061edee1e81a6875bf26b752ba5687c4ced71
```

Note: To add multiple to more than one test, you can either separate multiple
entries with commas on a single line, or add multiple `Multiply:` lines as shown
in the above example.

If the testing instructions are complex,
create an issue and provide a link to that issue in
the change description. If the change doesn't intend to change behavior,
indicate that fact in the commit message.

In some cases, certain behavior changes cannot be tested because Fuchsia lacks
some particular piece of infrastructure. If so, create an issue in the tracker
about the necessary infrastructure support and provide the bug number in the
change description, in addition to describing how the change is tested manually,
for example:

```none
Test: Manually tested that [...]. Automated testing needs US-XXXX.
```

Developers are responsible for high-quality automated testing of their code.
Reviewers are responsible for pushing back on changes that do not include
sufficient tests. See
[Fuchsia testability rubrics](/docs/development/testing/testability_rubric.md) for
more information on how to introduce testable and tested code in the Fuchsia
project.

## Add a buffer line before Change-Id {#add-buffer}

The Change-Id gets added automatically when you commit your changes. You may
want to add a buffer line between your other lines and the Change-Id, in case
you use `git commit --amend`, so that Gerrit doesn't parse the Change-Id as a
regular line, and add a second ID to it.

For more specific details, see the [Git interpret trailer
rules](https://git-scm.com/docs/git-interpret-trailers).

## Use Change-Id to refer to related changes {#use-change-id}

To reference another Gerrit change in a commit message,
always use the Change-Id.

Using the Change-Id is preferred since:

The git SHA is only known after a change is merged,
and while guidance could be given to use the Change-Id in one case,
and the git SHA in the other, prefer uniform guidance.
Furthermore, you cannot reference other repositories using the git SHA.

The link to the change is assigned by Gerrit,
and is not part of the persistent history of the repository.
Should the review mechanism change,
the Change-Id will continue to be part of the recorded history,
whereas the change's number will not.
There are also rare occurrences where change numbers may be lost,
for example, due to re-indexing issues.

For instance, to refer to the change that added
[RFC-0042](/docs/contribute/governance/rfcs/0042_non_nullable_types.md),
use `I32b966810d21a249647887fa45b61720ad01714c`,
and not the git SHA `5d40ee8c42d1b0e4d8b690786da12a0a947c1aaa`
or the link to the change,
https://fuchsia-review.googlesource.com/c/fuchsia/+/284569.
