#  Porting Comments User Documentation

Report a bug or send feedback using this [Monorail template](https://bugs.chromium.org/p/gerrit/issues/entry?template=Porting+Comments). You can also report a bug through the bug icon in the comment.

Comments in Gerrit are associated with a patchset. When a new patchset is uploaded, the comments are lost since they are not associated with the newer patchset.

image::images/user-porting-comment-original-comment.png["Comment left on Patchset 15", align="center"]

To solve this issue, Gerrit now has “Ported Comments”. These are comments that were left on an older patchset displayed on all the newer patchsets uploaded. For example, a comment left on Patchset 6 will be ported over to Patchset 7, 8 and all subsequent patchsets that are uploaded, not just the latest patchset.

Ported comments are not copies of the comment but the comment simply shown in another place.

Which comments are ported over?

*   Unresolved comments
*   Unresolved drafts
*   Resolved drafts

Resolved comments are not ported over.

image::images/user-porting-comment-ported-comment.png["Comment ported over to patchset 16", align="center"]

## Interaction

Ported comments are visually the same as normal comments. They have a link at the top which shows the original patchset of the comment and links to it.

Interacting with the ported comments is exactly the same as interacting with the original comment (again, they are simply the original comment shown in a different location). \
Marking a ported comment resolved/unresolved will also update the original comment.


## Position

Gerrit tries to calculate the position of this comment on the new version of the file and shows the comment on that position for the newer patchset.

It’s not always possible to calculate an appropriate position for a comment. In this case, Gerrit attaches these comments as File Level Comments.

In some exceptional cases (such as the entire file being reverted), there is no appropriate file to associate this comment with. In this case we do not port this comment over. The comment is still present at its original location and visible in the Comments Tab & Change Log.
