gerrit/Documentation/concept-changes.txt
Jonathan Nieder 988abed6c4 Clarify that Change-Ids identify amended commits, not followups
Change-Id: I7377a6b15522be74d64f3d2a1a7bb58026d5c3d7
2018-04-25 17:54:54 -07:00

212 lines
6.9 KiB
Plaintext

= 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
* link:CONCEPT-comments.html[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.
|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-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 <<topics>>.
* 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 <<topics>>.
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.
[[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.
GERRIT
------
Part of link:index.html[Gerrit Code Review]
SEARCHBOX
---------