= Changes

A change represents a single commit under review. Each change is identified
by a <<change-id>>.

Multiple git commits can share the same Change-Id, allowing you to update a
change as you receive feedback through the code review process. In Gerrit,
commits that share the same Change-Id are referred to as _patch sets_. When a
change is approved, only the latest version of a commit is submitted to the
repository.

You can view a specific change using Gerrit's Review screen. This screen
provides the following information for each change:

* Current and previous patch sets
* <<Change properties>>, such as owner, project, and target branch
* Comments
* Votes on link:config-labels.html[Review Labels]
* The <<change-id>>

[[change-properties]]
== Change properties

When you open a change in Gerrit, the Review screen displays a number of
properties about that change.

.Change Properties
|===
|Property|Description

|Updated
|The date on which the change was last updated.

|Owner
|The contributor who created the change.

|Uploader
|The user that uploaded the current patch set (e.g. the user that executed the
`git push` command, or the user that triggered the patch set creation through
an action in the UI).

|Assignee
|The contributor responsible for the change. Often used when a change has
mulitple reviewers to identify the individual responsible for final approval.

|Reviewers
|A list of one or more contributors responsible for reviewing the change.

|CC
|A list of one or more contributors who are kept informed about the change, but
are not required to review it.

|Project
|The name of the Gerrit project.

|Branch
|The branch on which the change was made.

|Topic
|An optional topic.

|Strategy
|The <<submit-strategies,submit strategy>> for the change.

|Code Review
|Displays the Code Review status for the change.

|===

In addition, Gerrit displays the status of any additional labels, such as
the Verified label, that have been configured for the server. See
link:config-labels.html[Review Labels] for more information.

[[change-message]]
== Change Message

Next to the list of change properties is the change message. This message
contains user-supplied information regarding what the change does. To modify
the change message, click the *Edit* link.

By default, the change message contains the Change-Id. This ID contains a
permanent link to a search for that Change-Id in Gerrit.

[[related-changes]]
== Related Changes

In some cases, a change may be dependent on another change. These changes are
listed next to the change message. These related changes are grouped together in
several categories, including:

* Relation Chain. These changes are related by parent-child relationships,
  regardless of <<topic,topic>>.
* Merge Conflicts. These are changes in which there is a merge conflict with
  the current change.
* Submitted Together. These are changes that share the same <<topic,topic>>.

An arrow indicates the change you are currently viewing.

[[topic]]
== Topics

Changes can be grouped by topics. Topics make it easier to find related changes
by using the topic search operator. Changes with the same topic also appear in
the *Relation Chain* section of the Review screen.

Grouping changes by topics can be helpful when you have several changes that,
when combined, implement a feature.

Assigning a topic to a change can be done in the change screen or through a `git
push` command.

For more information about using topics, see the user guide:
link:cross-repository-changes.html[Submitting Changes Across Repositories by using Topics].

[[submit-strategies]]
== Submit strategies

Each project in Gerrit can employ a specific submit strategy. This strategy is
listed in the change properties section of the Review screen.

The following table lists the supported submit strategies.

.Submit Strategies
|===
|Strategy|Description

|Fast Forward Only
|No merge commits are produced. All merges must be handled on the client, before
submitting the change.

To submit a change, the change must be a strict superset of the destination
branch.

|Merge If Necessary
|The default submit strategy. If the change being submitted is a strict superset
of the destination branch, then the branch is fast-forwarded to the change. If
not, a merge commit is automatically created at submit time. This is identical
to the `git merge --ff` command.

|Always Merge
|Always produce a merge commit, even if the change is a strict superset of the
destination branch. This is identical to the `git merge --no-ff` command.
It is often used when users of the project want to be able to read the history
of submits by running the `git log --first-parent` command.

|Cherry Pick
|Always cherry pick the patch set, ignoring the parent lineage and instead
creating a new commit on top of the current branch.

When cherry picking a change, Gerrit automatically appends a short summary of
the change's approvals and a link back to the change. The committer header is
also set to the submitter, while the author header retains the original patch
set author.

NOTE: Gerrit ignores dependencies between changes when using this submit type
unless `change.submitWholeTopic` is enabled and depending changes share the same
topic. This means submitters must remember to submit changes in the right order
when using this submit type.

|Rebase if Necessary
|If the change being submitted is a strict superset of the destination branch,
the branch is fast-forwarded to the change. If not, the change is automatically
rebased and the branch is fast-forwarded to the change.

|Rebase Always
|Similar to Rebase If Necessary, but creates a new patch set even if fast
forward is possible. This strategy is also similar to Cherry Pick; however,
Rebase Always does not ignore dependencies.

|===

Any project owner can use the Project screen to modify the method Gerrit uses
to submit a change.

[[change-id]]
== Change-Id

Gerrit uses a Change-Id to identify which patch sets belong to the same review.
For example, you make a change to a project. A reviewer supplies some feedback,
which you address in an amended commit. By assigning the same Change-Id to both
commits, Gerrit can attach those commits to the same change.

Change-Ids are appended to the end of a commit message, and resemble the
following:

....
commit 29a6bb1a059aef021ac39d342499191278518d1d
Author: A. U. Thor <author@example.com>
Date: Thu Aug 20 12:46:50 2009 -0700

    Improve foo widget by attaching a bar.

    We want a bar, because it improves the foo by providing more
    wizbangery to the dowhatimeanery.

    Bug: #42
    Change-Id: Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b
    Signed-off-by: A. U. Thor <author@example.com>
    CC: R. E. Viewer <reviewer@example.com>
....

Gerrit requires that the Change-Id is in the footer (last paragraph) of a
commit message. It can be combined with a Signed-off-by, CC, or other lines. For
instance, the previous example has a Change-Id, along with a Signed-off-by and
CC line.

Notice that the Change-Id is similar to the commit id. To avoid confusing the
two, a Change-Id typically begins with an `I`.

While there are several ways you can add a Change-Id, the standard
method uses git's link:cmd-hook-commit-msg.html[commit-msg hook]
to automatically add the Change-Id to each new commit.

== The Link footer

Gerrit also supports the Link footer as an alternative to the Change-Id
footer. A Link footer looks like this:

....
    Link: https://gerrit-review.googlesource.com/id/Ic8aaa0728a43936cd4c6e1ed590e01ba8f0fbf5b
....

The advantage of this style of footer is that it usually acts
as a link directly to the change's review page, provided that
the change has been uploaded to Gerrit. Projects such as the
link:https://www.kernel.org/doc/html/latest/maintainer/configure-git.html#creating-commit-links-to-lore-kernel-org[Linux kernel]
have a convention of adding links to commit messages using the
Link footer.

If multiple changes have been uploaded to Gerrit with the same
change ID, for example if a change has been cherry-picked to multiple
branches, the link will take the user to a list of changes.

The base URL in the footer is required to match the server's base URL.
If the URL does not match, the server will not recognize the footer
as a change ID footer.

The link:cmd-hook-commit-msg.html[commit-msg hook] can be configured
to insert Link footers instead of Change-Id footers by setting the
property `gerrit.reviewUrl` to the base URL of the Gerrit server.

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
