ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

first-contributions 中的 Git 提交修正实战:用 git commit --amend 修改最近提交的消息与遗漏内容

first-contributions 中的 Git 提交修正实战:用 git commit --amend 修改最近提交的消息与遗漏内容 first-contributions 中的 Git 提交修正实战用 git commit --amend 修改最近提交的消息与遗漏内容【免费下载链接】first-contributions✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions本文基于 first-contributions 仓库 中的「커밋 수정하기」修改提交教程展开完整讲解git commit --amend的三种典型用法修正最近一次提交的消息、把遗忘的小改动合并进已存在的提交以及对已推送到远端的提交进行修正force push。读完后你将能够在不制造多余提交、不破坏共享历史的前提下规范地“回退并改写”自己的最近提交。适用场景什么时候需要“修改提交”教程开篇给出的两个典型场景见 韩语教程原文提交消息里有拼写错误typo提交推出去之后才意识到最近一次提交漏掉了某几行代码或某个文件。git commit --amend的作用正是对最近一次提交进行改写它可以替换提交消息也可以把新的暂存区变更“追加”进上一次提交生成一个全新的提交对象来替代旧提交。场景一只修改最近提交的提交消息当你已经把提交推送到远端仓库只想改掉提交消息、且不打开任何文件编辑器时按以下步骤操作与 韩语教程 及 英文原版教程 一致输入命令用-m直接指定新消息git commit --amend -m your new commit message将修正后的提交推送到仓库git push origin branch-name关于-m标志的关键细节如果只输入git commit --amend而不带-mGit 会打开你配置的文本编辑器通常是~/.gitconfig中的core.editor或core.edit提示你编辑提交消息加上-m标志即可跳过编辑器、直接以命令行参数写入消息。这是命令行批处理、CI 脚本场景下避免挂起等待输入的必要手段。场景二把遗忘的小改动合并进已有的提交这是教程中更核心的实战场景你忘记了某个小改动比如漏掉了一个单词而这个提交已经推送到远端仓库。此时有两种处理思路。先看提交日志确认提交位置用git log查看当前分支的提交记录。教程给出的示例日志如下出自 韩语教程第 16-21 行g56123f create file bot file a2235d updated contributor.md a5da0d modified bot file假设你忘记了往botfile中添加一个单词。其中前 7 位如a5da0d是缩写提交哈希abbreviated commit hash即完整 SHA 的前缀可用于唯一标识该提交。如何系统地查看日志与 SHA可参见同仓库的 Check commit log 文档例如git log --oneline可逐行紧凑输出。两种处理方式的对比方式做法结果适用性方式一新建提交直接把改动作为一次全新提交推上去历史中多出一条b0ca8f added single word to botfile通用、安全但会留下碎片化历史方式二amend 修改原提交修改文件后git commit --amend把改动并入a5da0d两条变更合并为单一提交适合此类“微小修正”历史更干净方式一执行后的日志会变成g56123f create file bot file a2235d updated contributor.md a5da0d modified bot file b0ca8f added single word to botfile由于本次改动只是漏掉一个单词级别的微小变更教程认为方式二更优它避免了在提交历史中留下一条“added single word”这种信息量很低的补丁提交。方式二的完整操作步骤按 韩语教程第 34-49 行 与 英文原版第 37-49 行 的步骤执行修改文件把之前遗漏的单词补进botfile加入暂存区git add filename平时把文件加入暂存区后下一步通常是git commit -m our commit message创建新提交但这里的目标是修改上一次提交因此改为执行 amend。执行 amend注意正确拼写为--amend韩语教程第 41 行中的--ammend是笔误git commit --amend执行后文本编辑器会打开并提示你编辑提交消息——你可以保持原消息不变也可以顺便修改。退出编辑器保存推送变更git push origin branch-name最终效果文件内容与遗漏的单词合并进同一个提交历史记录中不再出现额外的“补丁提交”。进阶修正已推送到远端的提交需要 force push韩语教程的两个场景都以普通git push结尾这一点需要结合 英文原版教程的 Modifying commits on remote 章节 补充完整理解如果待修正的提交已经存在于远端amend 后你的本地历史就与远端分叉了——因为 amend 本质上是用一个全新提交对象替换了旧提交旧提交在远端仍然存在而新提交是远端从未见过的对象普通git push会因“non-fast-forward”被拒绝。要让远端接受你的修正必须覆盖远端该分支的历史git add your changed files git commit --amend -m followed by your new commit message git push --force原文在此处给出了明确的警告引用自 英文原版第 55-56 行Force pushing to the remote will overwrite (and discard) changes on the remote and only keep your pushed commits. Changes on the remote, that other team members did in the meantime, will be overwritten as well.强制推送会覆盖并丢弃远端上的变更只保留你推送的提交团队成员在此期间在远端所做的变更也会被一并覆盖。因此实践中的两条安全准则独占分支例如你 fork 后的特性分支上force push 是常规操作共享分支main/master或多人协作的特性分支上严禁随意 force push教程建议使用--force-with-lease代替--force它会在远端引用不是你本地记录的那个版本时拒绝推送从而避免覆盖别人刚推送的提交。与相邻 Git 操作的关系amend、revert、reset、squash 的边界first-contributions 仓库的docs/additional-material/git_workflow_scenarios/目录提供了一整套配套教程理解它们与 amend 的分工能避免误用revertRevert a commit创建一个新提交来撤销之前提交的全部变更历史只前进不重写。对于已推送、特别是共享分支上的错误提交revert 比 amend force push 安全得多——它依赖每个提交唯一的 SHA可通过git revert sha按序回退。resetReset a commit、Undo local commitsgit reset把分支指针移回某个旧提交可配合--hard丢弃工作区变更。它是本地历史回退手段同样不适用于已共享的远端分支——undoing-a-commit.md末尾明确提醒“已推送到共享仓库后绝不要执行git reset --hard”。squashSquashing commits通过git rebase -i交互式地把多个提交合并为一个。amend 可以看作“把一次改动并入最近提交”的轻量版 squash当需要合并的提交较多、或目标不是最近一次提交时应改用交互式 rebase。可以这样归纳决策路径只想改最近一次提交消息或补漏→git commit --amend已推送且独占分支 → 追加--force-with-lease已推送且分支共享 → 改用git revert。实操要点小结git commit --amend -m new message不打开编辑器直接替换最近提交的消息不带-m时会进入编辑器编辑。补漏流程修改文件 →git add filename→git commit --amend→ 保存退出编辑器 →git push origin branch-name使两处变更落入同一个提交。amend 会重写提交对象对已推送的提交做 amend 后本地与远端分叉必须 force push 才能让远端跟上共享分支上优先使用--force-with-lease或直接改用git revert。定位待修正提交时用git log --oneline获取缩写哈希前 7 位 SHA配合 check-commit-log 文档中的选项-n限量、按文件过滤等精确定位。以上所有命令与流程均可在当前仓库的 韩语教程原文 与 英文原版教程 中逐条对照验证配套的 revert、reset 与 squash 教程可作为进阶阅读。【免费下载链接】first-contributions✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表