云计算百科
云计算领域专业知识百科平台

Issue 怎么关联合并请求:写上 Closes #编号,合并后自动关闭

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

这篇讲怎么让问题和拉取请求连上,并在合并后自动关闭问题。看完你可以在拉取请求的标题或描述里写 Closes #编号,刷新后确认两边页面互相列出对方;关键字要用英文,写在评论里或只写 #编号 不会生效。

下文用线上仓库 xlliu/test-pr-example。问题 #4 标题是「折扣示例没有说明空购物车」,类型是 功能。拉取请求 #9 从 feature/link-empty-cart 合向 main,描述里写了 Closes #4。两条都还开着,页面上是合并前的样子。 问题 #4 与拉取请求 #9 的关联步骤

1. 先认清编号

AngusGit 界面上把 Issue 叫作 问题,侧栏里的入口和仓库代码页的页签都叫这个名字。

问题按仓库单独编号,从 #1 开始递增。拉取请求也按仓库单独编号,两套编号互不相干,所以同一个仓库里可以同时有问题 #1 和拉取请求 #1。下文写的 Closes #4,指的都是 问题 的编号,不是拉取请求 #4。

2. 建一条问题,记下编号

已经有问题的话,打开它,记下标题旁边的编号,跳到第 3 节。

  • 打开新建表单

    侧栏点 问题,在右上角点 新建问题。页面标题是 创建新问题。

  • 填写

    仓库 选 xlliu/test-pr-example。类型 选 Bug、功能、问题 或 增强 中的一个,创建后不能修改。这条示例选的是 功能,标题是「折扣示例没有说明空购物车」。描述 写清缺了什么。标签、指派人可以先不填。

  • 创建

    点 创建问题,提示 问题创建成功。打开这条问题,标题旁边的 # 加数字就是它的编号。这条示例是 #4。

  • 3. 在拉取请求里写上关键字

    修好代码、推到一个新分支之后,按平常的方式发起拉取请求。在 标题 或 描述 里,写上关键字加问题编号:

    docs: 说明空购物车不计算折扣

    Closes #4

    #9 的描述就是这两行。关键字和编号之间要有一个空格。下面九个关键字都可以,大小写不限,效果完全一样:

    词根可用的英文写法示例
    close close、closes、closed Closes #4
    fix fix、fixes、fixed Fixes #4
    resolve resolve、resolves、resolved Resolves #4

    一次关闭多个问题时,每个编号前面都要写关键字,例如 Fixes #4, fixes #5。写成 Fixes #4, #5 的话,只有 #4 会被关闭。#5 在这里只说明写法,这个仓库里没有问题 #5。

    写在不同地方,效果不一样:

    写在哪里两边页面会互相列出合并后自动关闭
    拉取请求的标题或描述 会 会
    拉取请求里某个提交的提交说明 不会 会
    拉取请求或问题下面的评论 不会 不会
    只写 #4,前面没有关键字 不会 不会
    中文「关闭 #4」「修复 #4」 不会 不会
    写成 owner/other-repo#4 这种带仓库名的引用 不会 不会

    最稳的做法是写在拉取请求的描述里:合并前就能在页面上确认两边已经连上,不用等到合并那一刻才知道。

    4. 合并之前,确认两边已经连上

    关联是页面打开时根据标题和描述实时算出来的,保存描述之后刷新页面就能看到。

    拉取请求页 会出现 关联的 Issue 一栏,列出 #4 和它的标题,旁边标着 合并后将关闭。 拉取请求 #9:关联的 Issue 标着合并后将关闭

    问题页 会出现 关联的 Pull Request 一栏,列出这条拉取请求,状态是 打开。 问题 #4:关联的拉取请求 #9 仍是打开 两边都没出现时,回到描述里检查关键字是不是拼对了、和 # 之间有没有空格、编号是不是这个仓库的问题。把描述里的关键字删掉,关联也会随之消失,不用另外解除。

    5. 合并之后,问题自动关闭

    拉取请求满足合并条件后,点 合并拉取请求。确认框里会多出一行 合并该 PR 后将自动关闭以下 1 个 Issue:,下面列着 #4。点 确认合并。

    这条示例没有合并,所以问题 #4 和拉取请求 #9 现在都还是 打开。合并完成后打开问题 #4,页面会变成:

    • 状态变成 已关闭,关闭原因是 已完成。
    • 时间线里多出一条「某某 关闭了此问题」,「某某」是点合并的那个人。
    • 关联的 Pull Request 里,那条请求的状态变成 已合并。

    有两点要提前知道:

    • 合并到任何分支都会关闭。 拉取请求的目标分支是 release 之类的非默认分支时,合并后问题同样会被关闭。如果你希望代码进了 main 才算修好,就只在合进 main 的那条拉取请求里写关键字。
    • 合并的人不需要有关闭问题的权限。 能合并这条拉取请求,就能通过它关闭问题。

    6. 没有自动关闭时

    你看到的原因怎么处理
    拉取请求页没有 关联的 Issue 这一栏 标题和描述里没有能识别的关键字,例如只写了 #4、写了中文「关闭」,或者关键字和 # 连在一起 改成 Closes #4 这样的写法,保存后刷新页面
    关键字写在提交说明里,合并前页面上看不到关联 提交说明只在合并时检查,页面上的关联只看标题和描述 这是正常的,合并后照样会关闭。想提前确认,就把关键字也写进描述
    合并了,问题仍然 打开 关键字写在了评论里;写的是另一个仓库的问题;或者代码是直接推送到分支的,没有经过拉取请求 只有通过拉取请求合并,并且关键字写在标题、描述或提交说明里,才会自动关闭。需要的话在问题页手动 关闭
    一次写了多个编号,只关了第一个 写成了 Fixes #4, #5,第二个编号前面没有关键字 每个编号前都写关键字。漏关的那个手动关闭
    问题被提前关掉了 关键字写在了合进非默认分支的拉取请求里 在问题页点 重新打开,以后只在合进 main 的那条请求里写关键字

    常见问题

    有没有手动把问题和拉取请求连起来的按钮?

    没有。关联完全由拉取请求标题和描述里的关键字决定。要建立关联就写上关键字,要解除就删掉它。

    只想在拉取请求里提一下某个问题,不想合并后关掉它,怎么写?

    不要用关键字,写成「相关问题:#4」这样的普通文字即可。它不会出现在关联列表里,合并后也不会关闭问题。

    问题自动关错了,怎么恢复?

    打开问题,点 重新打开。状态回到 打开,原来的评论和时间线都还在。

    直接推送到 main 的提交里写 Fixes #4,会关闭问题吗?

    不会。自动关闭只在拉取请求合并时发生。直接推送的提交不会触发。

    手动关闭问题时可以选原因吗?

    可以。在问题页点 关闭,在 请选择关闭原因 里选 已完成 或 不计划实施,再点 确认关闭。自动关闭的原因固定是 已完成。

    小结

    让问题和拉取请求连上,只需要在拉取请求的标题或描述里写一句英文关键字加编号,例如 Closes #4。写好之后先刷新页面,确认拉取请求页的 关联的 Issue 里标着 合并后将关闭。合并之后,问题自动关闭,原因记为 已完成,时间线写明是谁合并的。中文关键字、只写编号、写在评论里,或者直接推送代码,都不会触发关联和自动关闭。

    结论: 在拉取请求的标题或描述里写 Closes #编号(或 Fixes #编号、Resolves #编号),两边页面就会互相列出关联,并在拉取请求合并后自动把问题置为 已关闭(已完成)。

    参考文章

    • AngusGit 手册:问题与里程碑
    • AngusGit 手册:拉取请求(创建、合并条件)
    • 怎么保护 Git 主分支:先开分支保护,再用合并请求合代码
    • 在合并请求里做完代码评审:看 Diff、写行评、通过或打回
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Issue 怎么关联合并请求:写上 Closes #编号,合并后自动关闭
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!