125.md 15.1 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
# Reviewing and managing merge requests

> 原文:[https://docs.gitlab.com/ee/user/project/merge_requests/reviewing_and_managing_merge_requests.html](https://docs.gitlab.com/ee/user/project/merge_requests/reviewing_and_managing_merge_requests.html)

*   [View project merge requests](#view-project-merge-requests)
*   [View merge requests for all projects in a group](#view-merge-requests-for-all-projects-in-a-group)
*   [Semi-linear history merge requests](#semi-linear-history-merge-requests)
*   [View changes between file versions](#view-changes-between-file-versions)
    *   [Merge request diff file navigation](#merge-request-diff-file-navigation)
    *   [File-by-file diff navigation](#file-by-file-diff-navigation)
        *   [Enable or disable file-by-file diff navigation](#enable-or-disable-file-by-file-diff-navigation-core-only)
    *   [Merge requests commit navigation](#merge-requests-commit-navigation)
    *   [Incrementally expand merge request diffs](#incrementally-expand-merge-request-diffs)
    *   [Ignore whitespace changes in Merge Request diff view](#ignore-whitespace-changes-in-merge-request-diff-view)
*   [Perform inline code reviews](#perform-inline-code-reviews)
*   [Pipeline status in merge requests widgets](#pipeline-status-in-merge-requests-widgets)
    *   [Post-merge pipeline status](#post-merge-pipeline-status)
    *   [Merge when pipeline succeeds (MWPS)](#merge-when-pipeline-succeeds-mwps)
    *   [Live preview with Review Apps](#live-preview-with-review-apps)
*   [Associated features](#associated-features)
*   [Troubleshooting](#troubleshooting)
    *   [Merge request cannot retrieve the pipeline status](#merge-request-cannot-retrieve-the-pipeline-status)
        *   [Sidekiq](#sidekiq)
        *   [Bug](#bug)
*   [Tips](#tips)
    *   [Checkout merge requests locally](#checkout-merge-requests-locally)
        *   [Checkout locally by adding a Git alias](#checkout-locally-by-adding-a-git-alias)
        *   [Checkout locally by modifying `.git/config` for a given repository](#checkout-locally-by-modifying-gitconfig-for-a-given-repository)

# Reviewing and managing merge requests[](#reviewing-and-managing-merge-requests "Permalink")

合并请求是在 GitLab 项目中更改文件的主要方法. 通过[创建并提交合并请求](creating_merge_requests.html)来提出更改,然后将其审核并接受(或拒绝).

## View project merge requests[](#view-project-merge-requests "Permalink")

导航到" **项目">"合并请求",**以查看项目中的所有**合并请求** .

当您访问项目的合并请求时,GitLab 会将它们显示在列表中,并且您可以使用可用的选项卡来快速按打开和关闭进行过滤. 您还可以[搜索和过滤结果](../../search/index.html#filtering-issue-and-merge-request-lists) .

[![Project merge requests list view](img/252e40c4dc029a21eb939cb40f715d34.png)](img/project_merge_requests_list_view.png)

## View merge requests for all projects in a group[](#view-merge-requests-for-all-projects-in-a-group "Permalink")

查看组中所有项目中的合并请求,包括组中所有后代子组的所有项目. 导航到**组>合并请求**以查看这些合并请求. 该视图还具有打开和关闭的合并请求选项卡.

您可以从此处[搜索和过滤结果](../../search/index.html#filtering-issue-and-merge-request-lists) .

[![Group Issues list view](img/1c96e8d94988240b7dc68ae02dbea405.png)](img/group_merge_requests_list_view.png)

## Semi-linear history merge requests[](#semi-linear-history-merge-requests "Permalink")

将为每个合并创建一个合并提交,但是只有在可能进行快速合并的情况下才合并分支. 这样可以确保如果合并请求构建成功,则合并后目标分支构建也将成功.

导航到项目的设置,在" **合并请求:合并"方法**下选择" **使用半线性历史** **合并合并"**选项,然后保存更改.

## View changes between file versions[](#view-changes-between-file-versions "Permalink")

**更改**选项卡位于主要合并请求详细信息下方,并且在讨论选项卡旁边,显示了分支或提交之间文件的更改. 这种对文件更改的视图也称为**diff** . 默认情况下,差异视图将合并请求分支中的文件与目标分支中的文件进行比较.

The diff view includes the following:

*   文件的名称和路径.
*   添加和删​​除的行数.
*   用于以下选项的按钮:
    *   切换此文件的注释; 用于内联评论.
    *   在合并请求的分支中编辑文件.
    *   显示完整文件,以防您要查看上下文中文件其余部分的更改.
    *   在当前提交时查看文件.
    *   使用[Review Apps](../../../ci/review_apps/index.html)预览更改.
*   已更改的行,突出显示了特定的更改.

[![Example screenshot of a source code diff](img/1a3f578f317c266ca4b5d61eb91d025b.png)](img/merge_request_diff_v12_2.png)

### Merge request diff file navigation[](#merge-request-diff-file-navigation "Permalink")

在" **更改"**选项卡中查看更改时,可以使用文件树或文件列表来浏览差异. 在具有许多更改的大型差异中滚动时,可以使用文件树或文件列表快速跳转到任何更改的文件.

[![Merge request diff file navigation](img/65770b50cd2119e84c6a852b44cf403d.png)](img/merge_request_diff_file_navigation.png)

### File-by-file diff navigation[](#file-by-file-diff-navigation "Permalink")

版本历史

*   在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/222790) .
*   它部署在默认情况下启用的功能标志后面.
*   建议用于生产.
*   在 GitLab.com 上启用了它.
*   对于 GitLab 自我管理的实例,GitLab 管理员可以选择[禁用它](#enable-or-disable-file-by-file-diff-navigation-core-only) .

对于较大的合并请求,有时一次查看单个文件可能会很有用. 要启用,请从右上角导航栏上的头像,单击**"设置"** ,然后转到左侧边栏上的**"首选项"** . 向下滚动到" **行为"**部分,然后**在合并请求的"更改"标签上**选择**"一次显示一个文件"** . 点击**保存更改**以应用.

从那里,在查看合并请求的" **更改"**选项卡时,一次只能看到一个文件. 然后,您可以单击按钮上**一个****下一个**以查看其他已更改的文件.

[![File-by-file diff navigation](img/7887f58c141f9c2e749a75158e430ac6.png)](img/file_by_file_v13_2.png)

#### Enable or disable file-by-file diff navigation[](#enable-or-disable-file-by-file-diff-navigation-core-only "Permalink")

逐文件差异导航正在开发中,但已准备好用于生产. 它部署在**默认情况下启用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../../../administration/feature_flags.html)可以选择为您的实例禁用它.

要启用它:

```
# Instance-wide
Feature.enable(:view_diffs_file_by_file) 
```

禁用它:

```
# Instance-wide
Feature.disable(:view_diffs_file_by_file>) 
```

### Merge requests commit navigation[](#merge-requests-commit-navigation "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/18140) in GitLab 13.0.

要在合并请求中的**提交**之间无缝导航,请从" **提交"**选项卡中,单击其中一个提交以打开单提交视图. 从那里,您可以通过单击页面右上角的**Prev****Next**按钮或使用`X``C`键盘快捷键在提交之间进行导航.

### Incrementally expand merge request diffs[](#incrementally-expand-merge-request-diffs "Permalink")

默认情况下,差异仅显示文件中已更改的部分. 要查看更改上方或下方的更多未更改行,请单击" **向上** **扩展"**或" **向下扩展"**图标. 您也可以单击**显示未更改的行**以展开整个文件.

[![Incrementally expand merge request diffs](img/da60a36cf66e162640faa1f6cddaacdc.png)](img/incrementally_expand_merge_request_diffs_v12_2.png)

在 GitLab 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/205401) ,当查看合并请求的**更改**选项卡时,如果仅重命名了某个文件,则可以通过单击**显示文件内容**展开它以查看全部**内容** .

### Ignore whitespace changes in Merge Request diff view[](#ignore-whitespace-changes-in-merge-request-diff-view "Permalink")

如果单击" **隐藏空白更改"**按钮,则可以看到没有空白更改的差异(如果有的话). 在特定的提交页面上,这也可以工作.

[![MR diff](img/1a097c142decf7d516165322a0f7b880.png)](img/merge_request_diff.png)

> **提示:**您可以在合并请求的差异页面上附加`?w=1` ,以忽略任何空格更改.

## Perform inline code reviews[](#perform-inline-code-reviews "Permalink")

在 GitLab 11.5 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/13950) .

GitLab 提供了一种在合并请求中更改文件的任何部分中保留注释的方法. 为此,请在"合并请求"差异 UI 的装订线中单击**…**按钮以展开差异行并留下评论,就像更改行一样.

[![Comment on any diff file line](img/9aa51957855aec8590e352694fe75d5d.png)](img/comment-on-any-diff-line.png)

## Pipeline status in merge requests widgets[](#pipeline-status-in-merge-requests-widgets "Permalink")

如果您在项目中设置了[GitLab CI / CD](../../../ci/README.html) ,您将能够看到:

*   合并前和合并后管道以及环境信息(如果有).
*   正在进行哪些部署.

如果存在[环境](../../../ci/environments/index.html)并且已将应用程序成功部署到该环境,则还将显示已部署的环境以及指向 Review App 的链接.

### Post-merge pipeline status[](#post-merge-pipeline-status "Permalink")

合并请求合并后,可以看到合并请求合并到的分支的合并后管道状态. 例如,当合并请求合并到 master 分支中,然后触发到暂存环境的部署时.

将显示正在进行的部署,以及环境的部署/部署状态. 如果是第一次部署分支,则该链接将返回`404`错误,直到完成. 在部署期间,停止按钮将被禁用. 如果管道无法部署,则部署信息将被隐藏.

[![Merge request pipeline](img/1c4eef7cdb82fd840a9facad4ee93d6b.png)](img/merge_request_pipeline.png)

有关更多信息,请[阅读有关管道](../../../ci/pipelines/index.html) .

### Merge when pipeline succeeds (MWPS)[](#merge-when-pipeline-succeeds-mwps "Permalink")

设置一个看起来准备合并的合并请求,以[在 CI 管道成功时自动合并](merge_when_pipeline_succeeds.html) .

### Live preview with Review Apps[](#live-preview-with-review-apps "Permalink")

如果为项目配置了[Review Apps](https://about.gitlab.com/stages-devops-lifecycle/review-apps/) ,则可以逐分支预览通过合并请求提交给功能分支的更改. 无需检出分支机构,在本地安装和预览; 带有"评论应用"链接的任何人都可以预览所有更改.

设置了 GitLab 的" [路线图"后](../../../ci/review_apps/index.html#route-maps) ,合并请求小部件会将您直接带到已更改的页面,从而使预览建议的修改变得更加轻松快捷.

[Read more about Review Apps](../../../ci/review_apps/index.html).

## Associated features[](#associated-features "Permalink")

还有大量与合并请求关联的功能:

| Feature | Description |
| --- | --- |
| [Bulk editing merge requests](../../project/bulk_editing.html) | 同时更新多个合并请求的属性. |
| [Cherry-pick changes](cherry_pick_changes.html) | 只需在合并的合并请求或提交中单击**Cherry-pick**按钮,即可在 UI 中 Cherry-pick 任何**选择** . |
| [Fast-forward merge requests](fast_forward_merge.html) | 有关线性 Git 历史记录以及接受合并请求而不创建合并提交的方法 |
| [Find the merge request that introduced a change](versions.html) | 当查看提交详细信息页面时,GitLab 将链接到包含该提交的合并请求. |
| [Merge requests versions](versions.html) | 选择并比较合并请求差异的不同版本 |
| [Resolve conflicts](resolve_conflicts.html) | GitLab 可以提供选项来解决 GitLab UI 中的某些合并请求冲突. |
| [Revert changes](revert_changes.html) | 从合并请求中的任何提交还原更改. |

## Troubleshooting[](#troubleshooting "Permalink")

有时,合并请求中的操作并没有按预期进行,这是一些故障排除步骤.

### Merge request cannot retrieve the pipeline status[](#merge-request-cannot-retrieve-the-pipeline-status "Permalink")

如果 Sidekiq 没有足够快地进行更改,则会发生这种情况.

#### Sidekiq[](#sidekiq "Permalink")

Sidekiq 没有足够快地处理 CI 状态更改. 请等待几秒钟,状态将自动更新.

#### Bug[](#bug "Permalink")

发生以下情况时,无法检索合并请求管道的状态:

1.  创建合并请求
2.  合并请求已关闭
3.  在项目中进行了更改
4.  合并请求被重新打开

要正确检索管道状态,请再次关闭并重新打开"合并请求".

## Tips[](#tips "Permalink")

以下是一些技巧,可帮助您在命令行中更有效地处理合并请求.

> **注意:**此部分将来可能会在其自己的文档中移动.

### Checkout merge requests locally[](#checkout-merge-requests-locally "Permalink")

合并请求包含来自存储库的所有历史记录,以及添加到与合并请求关联的分支的其他提交. 这是一些在本地检出合并请求的技巧.

请注意,即使源项目是目标项目的分支(甚至是私有分支),也可以在本地签出合并请求.

#### Checkout locally by adding a Git alias[](#checkout-locally-by-adding-a-git-alias "Permalink")

将以下别名添加到`~/.gitconfig`

```
[alias]
    mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' - 
```

现在,您可以从任何存储库和任何远程签出特定的合并请求. 例如,要从`origin`远程服务器签出 ID 为 5 的合并请求(如 GitLab 所示),请执行以下操作:

```
git mr origin 5 
```

这会将合并请求提取到本地`mr-origin-5`分支中,并检出它.

#### Checkout locally by modifying `.git/config` for a given repository[](#checkout-locally-by-modifying-gitconfig-for-a-given-repository "Permalink")

`.git/config`文件中找到适用于 GitLab 遥控器的部分. 看起来像这样:

```
[remote "origin"]
  url = https://gitlab.com/gitlab-org/gitlab-foss.git
  fetch = +refs/heads/*:refs/remotes/origin/* 
```

您可以使用以下方式打开文件:

```
git config -e 
```

现在,将以下行添加到上面的部分:

```
fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/* 
```

最后,它应如下所示:

```
[remote "origin"]
  url = https://gitlab.com/gitlab-org/gitlab-foss.git
  fetch = +refs/heads/*:refs/remotes/origin/*
  fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/* 
```

现在,您可以获取所有合并请求:

```
git fetch origin

...
From https://gitlab.com/gitlab-org/gitlab-foss.git
 * [new ref]         refs/merge-requests/1/head -> origin/merge-requests/1
 * [new ref]         refs/merge-requests/2/head -> origin/merge-requests/2
... 
```

并检查特定的合并请求:

```
git checkout origin/merge-requests/1 
```

以上所有操作均可通过[`git-mr`](https://gitlab.com/glensc/git-mr)脚本完成.