700 字
4 分钟

提交Commit或PR的同时关闭Issue

TIP

在处理 issue 的流程里,把修复信息写进 commit 或 PR 描述可以在合并后自动关闭 issue,保持 Issue 与提交记录的一致性。

GitHub 支持的关键词#

GitHub 在提交信息或 PR 描述中识别以下关键词(不区分大小写):

  • close, closes, closed
  • fix, fixes, fixed
  • resolve, resolves, resolved

示例(都会在合并后自动关闭 #123):

  • “Fixes #123”
  • “Closes #123”
  • “Resolved #123”

也可以一次性关闭多个 issue:

Fixes #12, fixes #34, closes #56

对于跨仓库引用,可以使用 owner/repo#number 的形式:

Fixes CuteLeaf/other-repo#78

注意:跨仓库引用仅在目标仓库可见且合并到目标仓库的默认分支时生效。

把关键词放在 Commit message 还是 PR 描述?#

  • 直接写在 Commit message:当该 commit 最终被合并到仓库的默认分支时,GitHub 会在合并后关闭 issue。
  • 写在 PR 描述:更常见也更可控。无论 PR 中包含多少个修复 commit,只要 PR 描述含有关键词并且 PR 被合并,相关 issue 会被关闭。

推荐做法:在 PR 描述中写 Closes #123,同时在具体修复的 commit 中也简短标注(如 fix: 修复 X 问题 (#123)),这样审查者和历史记录都清晰。

常见使用场景#

  1. 直接在 commit 中引用(一次性提交并推送)
Terminal window
git add .
git commit -m "Fixes #45: 修复登录超时问题"
git push origin feature/fix-login

如果你直接把这个 commit 推到 main(不推荐在协作仓库直接推到主分支),GitHub 会在该 commit 入主分支时关闭 issue。

  1. 在本地修改某个 commit(补上关闭关键词)
Terminal window
git commit --amend -m "Fixes #45: 修复登录超时问题"
git push --force-with-lease origin feature/fix-login

注意:--amend 会修改提交哈希,强推(force push)可能影响协作中的其他人,慎用。

  1. 在 PR 描述中关闭 issue(推荐)

在创建 PR 时,在描述里写:

This PR fixes the login timeout and improves retry logic.
Closes #45

合并 PR 后,issue #45 会自动被关闭。

注意事项#

  • 仅当包含关键词的提交被合并到目标仓库的默认分支时,Issue 才会被关闭。把 commit 推到你的 fork 并不会关闭上游仓库的 issue,除非该 commit 被合并回上游仓库。
  • 在 PR 描述中使用关键词通常比在某个单独 commit 中更可靠,因为 PR 合并时不会因为 rebase/合并策略而丢失信息。
  • 如果你想引用 issue 但不自动关闭,使用 Refs #123See #123(这些不会触发自动关闭)。
  • 合并方式会影响行为:使用 rebase + merge 时,commit message 中的关键词依然会被识别;使用 squash merge 时,最终被合并的那条 squash commit 的 message 决定是否关闭 issue(因此在合并前请确保 PR 描述或合并消息包含关闭关键词)。

赞助支持

如果这篇文章对你有帮助,欢迎赞助支持!

赞助
提交Commit或PR的同时关闭Issue
https://blog.cuteleaf.cn/posts/practical-skills/close-issue-pr-with-commit/
作者
夏叶
发布于
2025-11-10
许可协议
CC BY-NC-SA 4.0
最后更新于 2025-11-10,距今已过 26 天

部分内容可能已过时

评论区

目录