Git提交后追加修改操作指南

在开发时经常会遇到在git commit后,又把文件修改了一下的情况,此时要如何操作才能避免提交多个commit呢?


前面你已经走了这两步:

sql 复制代码
git add .
git commit -m "fix:修改了一个bug"

此时你提交的代码还在本地暂存区,然后你又发现没改完,又有新修改文件产生。

接下来,你的操作步骤应该是这样的:

基本步骤

  1. 将修改的文件添加到暂存区(Staging Area)

    这里还是和你平时提交前一样,使用 git add 命令。

    csharp 复制代码
    # 添加某个特定文件
    git add <文件名>
    # 或者,添加所有当前修改的文件
    git add .
  2. 执行修改提交(Amend Commit)

    这会把你刚刚添加的修改,合并到上一次的commit提交中,并且会重写(覆盖) 上一次的提交。

    sql 复制代码
    git commit --amend

git commit --amend 后会发生什么?

如果你的文本编辑器(如 Vim, VSCode 等)弹出来了一段文本内容,不要慌,你会看到上一次提交的提交信息。

这时你可以 直接保存退出 (一般是输入:wq),就使用原来的提交信息。或者也可以修改提交信息,然后保存退出,相当于这是你修改上次写错的提交信息的机会。

  1. 命令执行完成后,commit被重置

你之前的那次提交(我称之为 Commit A)就会被一个新的提交(姑且称之为 Commit A')所替代。Commit A' 包含了原来的更改和你刚刚添加的更改。

最终效果:你的提交历史中看起来只有一次提交,但这次提交包含了你后来追加的更改,很nice。


重要提醒(尤其涉及远程仓库时)

涉及到远程仓库时,我都是很小心的,因为这可能会污染同事的代码,前面几步都是在本的操作。这里说一下涉及远程仓库时要注意的地方:

如果已经推送到远程了怎么办?

如果你已经将原来的提交 git push 到了远程仓库,那么在你本地执行 --amend 后,你的本地历史就和远程历史不一致了。

这时你需要使用 git push --force-with-lease(推荐 )或 git push --force 来强制覆盖远程仓库的历史。

请谨慎使用 force push,因为这会影响此项目中的其他程序员------如果他们已经基于你原来的提交进行了开发,强制推送会打乱他们的流程。通常只在确定只有你一人在修改这个分支时才能这么做。

操作流程总结

csharp 复制代码
# 1. 提交后,发现还有需要修改的地方,继续修改文件
# 2. 将修改后的文件加入暂存区
git add <file(s)>
# 或者
git add .

# 3. 将修改追加到上一次提交
git commit --amend
# (在弹出的编辑器中确认或修改提交信息,然后保存退出)

# 4. 【如果之前的提交已经推送到远程】需要强制推送更新
git push --force-with-lease

一般情况下,只需完成前两步 git add 和 git commit --amend 即可。

如果这篇文章对你有用,请帮我转发分享,谢谢支持!

相关推荐
极小狐6 天前
CI 作业里 kubectl 连不上集群?用 Kubernetes Agent 打通部署链路的 7 个步骤
ci/cd·kubernetes·gitlab·devops·k8s部署
Zhou1411366 天前
Git_02_GitLab协作与CI_CD
git·ci/cd·gitlab
白帽攻防录6 天前
SRC 挖洞:GitLab GraphQL 指令绕过深度复盘,CVE-2026-19478 未授权删项目怎么打穿代码托管平台
网络·网络安全·gitlab·graphql
daemon.qiang16 天前
国内虚拟机对接 Freedesktop:Fork xserver、自建 Runner 与提交 MR 实战
linux·ubuntu·centos·gitlab·开源软件
snow@li21 天前
服务器运维:K3S 下 Jenkins ↔ GitLab 的 CI/CD 闭环 / 访问成功
运维·gitlab·jenkins
旧梦星轨23 天前
Git Flow 工作流实践
git·gitee·gitlab·github
旧梦星轨23 天前
Github Flow 与 Gitlab Flow工作流实践解读
gitlab·github
极小狐1 个月前
干掉流水线里的长期密钥:用 OIDC 让 CI/CD 与云以临时凭证对接
microsoft·ci/cd·gitlab·devops·ci·cd·oidc
snow@li1 个月前
服务器运维:阿里云安装软件gitlab/智能体协助安装/智能体协同运维
运维·gitlab
极小狐1 个月前
CI 流水线提速实战:缓存设计与依赖代理的工程实践
缓存·ci/cd·gitlab·devops