git commit 是 Git 版本控制系统中最核心的命令之一,它的作用是将暂存区(Staging Area) 中的内容永久保存到本地 Git 仓库的历史记录中,创建一个新的提交(Commit)。

核心概念:

  1. 工作目录(Working Directory):你实际编辑文件的地方。
  2. 暂存区(Staging Area / Index):一个中间区域,用于准备下一次提交。你用 git add 命令将工作目录中修改的文件添加到暂存区。
  3. 本地仓库(Local Repository):存储项目完整历史记录和元数据的 .git 目录。git commit 就是将暂存区的内容快照保存到这里。

基本语法:

git commit [选项]

最常见和重要的用法:

  1. 提交暂存区的所有更改并添加提交信息:
    这是最常用的方式。它会打开一个文本编辑器(通常是 Vim 或系统默认编辑器)让你输入本次提交的详细说明(Commit Message)。

    git commit
    
    • 在打开的编辑器中,第一行写一个简短精炼的总结(标题)(通常不超过50个字符)。
    • 空一行。
    • 然后可以写详细的正文说明(可选,解释为什么做这个修改、做了什么、有什么影响等)。遵循良好的提交信息规范(如 Conventional Commits)对团队协作非常重要。
    • 保存并关闭编辑器后,提交就完成了。
  2. 直接在命令行中提供提交信息(避免打开编辑器):
    使用 -m--message 选项,后面跟上用引号括起来的提交信息。这是提交简短修改时最高效的方式。

    git commit -m "修复了用户登录失败的bug"
    git commit -m "添加新功能:用户个人资料页面"
    git commit -m "更新项目文档 README.md"
    

常用选项:

  • -a / --all:

    • 这个选项非常实用,它告诉 Git 在提交之前,自动将所有已跟踪(tracked)且已被修改(modified)或已删除(deleted)的文件添加到暂存区
    • 相当于先执行了 git add -u(更新所有已跟踪文件的修改/删除状态到暂存区),然后再执行 git commit
    • 注意:不会自动添加新建的未跟踪(untracked)文件。你仍然需要先用 git add 添加新文件。
    • 用法:
      git commit -a -m "提交所有已跟踪文件的修改"
      # 或者
      git commit -am "提交所有已跟踪文件的修改" # -a 和 -m 可以合并
      
  • --amend:

    • 这个选项允许你修改最近的一次提交。它非常有用,例如:
      • 你刚刚提交完,发现漏掉了一个小修改或者提交信息里有个错别字。
      • 你想把刚刚漏掉 git add 的文件添加到上一个提交中。
    • 它会将当前暂存区中的更改上一次提交的内容合并,并让你重新编辑提交信息(如果不指定 -m)。
    • 重要提示: 修改的是提交历史本身。如果这个提交已经推送(git push)到了远程仓库,再 amend 本地提交并强制推送(git push --force)会覆盖远程历史,可能导致协作问题。只应在本地未推送或明确知道后果时使用。
    • 用法:
      # 修改最近一次提交,包含当前暂存区的更改,并重新编辑提交信息
      git commit --amend
      # 修改最近一次提交,包含当前暂存区的更改,并直接指定新的提交信息(不打开编辑器)
      git commit --amend -m "新的提交信息"
      
  • -v / --verbose:

    • 在打开的提交信息编辑器中,会在信息下方额外显示你所提交的更改的差异(diff)。这有助于你更清晰地回顾和编写提交说明。
  • --allow-empty:

    • 允许创建一个没有任何文件更改的“空提交”。这在某些特殊场景下有用(例如触发 CI/CD 流程),但通常不常见。
  • --no-verify:

    • 绕过 Git 钩子(Git Hooks),例如 pre-commitcommit-msg 钩子。这些钩子通常用于在提交前运行代码检查、测试或信息格式验证。谨慎使用,除非你明确知道为什么需要跳过钩子。

使用流程总结:

  1. 修改文件: 在工作目录中编辑、添加或删除文件。
  2. 暂存更改: 使用 git add <文件名>git add .(谨慎使用)将想要包含在下一次提交中的更改添加到暂存区。git status 可以查看哪些文件被修改/暂存/未跟踪。
  3. 执行提交: 使用 git commitgit commit -m "提交信息" 将暂存区的内容创建为一个新的提交记录,保存到本地仓库历史中。
  4. (可选)修改最近提交: 如果需要修正刚提交的内容或信息,使用 git commit --amend(注意风险)。
  5. 推送: 当准备好分享你的工作时,使用 git push 将本地提交推送到远程仓库。

良好提交信息的准则:

  • 标题行(第一行):
    • 简短精炼(最好 <= 50 字符)。
    • 动词开头(使用祈使语气,如 Fix, Add, Update, Remove, Refactor, Bump, Release…)。
    • 描述做了什么改变(What changed),而不是为什么改变(Why)。Why 可以写在正文。
    • 首字母大写。
    • 结尾不加句号
  • 正文(可选):
    • 在标题行后空一行开始。
    • 详细解释为什么需要这个改变(Why)这个改变是如何实现的(How),或者它解决了什么问题。
    • 每行建议 <= 72 字符,方便阅读。
    • 可以使用项目规范的问题追踪编号(如 Closes #123, Fixes JIRA-456)。
  • 示例:
    Add user profile picture upload feature
    
    - Implemented backend API endpoint `/users/:id/avatar` using Multer middleware
    - Added frontend component `AvatarUploader.vue` with drag-and-drop support
    - Validates image type and size on client and server
    - Stores images in Amazon S3 bucket 'user-avatars'
    - Resolves issue #42
    

**简而言之:git commit 是将你精心准备(通过 git add 暂存)的一组更改,作为一个有意义的、带有描述信息的快照,永久记录到你的项目 Git 历史中的命令。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐