| # 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. |