尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

first-contributions 项目实战:用 git commit --amend 修改提交信息与合并遗漏改动

first-contributions 项目实战:用 git commit --amend 修改提交信息与合并遗漏改动 first-contributions 项目实战用 git commit --amend 修改提交信息与合并遗漏改动【免费下载链接】first-contributions✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions本指南以 first-contributions 仓库的进阶教程土耳其语版英文原版为骨架讲解当你已经向远程仓库推送push提交后如何用git commit --amend修正提交信息中的拼写错误、把忘记加入的改动合并进最近一次提交以及如何在远程分支上安全地覆盖历史。读完本文你将掌握--amend与-m的组合用法、修改单个提交的标准流程以及--force与--force-with-lease在协作场景中的取舍。一、为什么需要 amend场景与适用边界在 first-contributions 项目的标准贡献流程fork → clone → 新建分支 → 修改Contributors.md→ commit → push → Pull Request参见 README.md中一个很常见的失误是提交已经推送到了远程仓库随后才发现提交信息有拼写错误或者忘了把某个文件里的一行改动包含进最近一次提交。此时最直接的处理手段就是git commit --amend。amend的含义是修订它不会新增一个提交而是原地替换当前分支上的最近一次提交HEAD。因此它只适用于修改最近一个提交且最适合小改动场景。正如英文原版教程所强调的进阶资料索引将其定位为需要调整一个已提交的 commit 时使用。注意--amend只针对最近一次提交。若要修改更早的历史提交需要借助 interactive rebase可参考 squashing-commits.md不在本文讨论范围内。二、推送到 GitHub 后修改最近一次提交的信息如果你只想修正提交信息message且不想打开任何编辑器一行命令即可完成git commit --amend -m 你的新提交信息随后把改动推送到远程仓库git push origin branch-name其中branch-name是当前所在的分支名例如 first-contributions 教程中创建的add-alonzo-church这类功能分支。关键细节-m参数的作用如果只输入git commit --amend不带-mGit 会打开默认文本编辑器提示你逐行编辑提交信息加上-m标志则直接以命令行参数作为新的提交信息跳过编辑器适合只想快速改一个词的场景土耳其语原版教程第 11-12 行专门指出了这一点。注意这里git commit --amend -m ...与普通的git commit -m ...有一个本质区别——--amend会让新提交替代旧的最近一次提交因此提交哈希commit hash会改变而普通 commit 会在历史顶部追加一个新提交。三、修改单个提交把遗漏的改动合并进去原版教程给出了一个非常典型的例子。假设你的提交历史如下g56123f create file botfile a2235d updated contributor.md a5da0d modified botfile你发现a5da0dmodified botfile里忘记往 botfile 文件里加一个单词。这时有两条路方案一新增一个独立提交历史变成g56123f create file botfile a2235d updated contributor.md a5da0d modified botfile b0ca8f added single word to botfile方案二修改amenda5da0d把这个遗漏的单词并进去作为一个提交推送到 GitHub。教程明确指出方案二更可取因为这只是一个小改动没有必要为它制造一条孤立的提交记录保持历史整洁对开源协作尤为重要。方案二的标准操作流程如下修改文件。在本例中编辑 botfile把之前遗漏的单词补上。加入暂存区git add dosya-adı # 例如 git add botfile执行 amend 而非普通 commit。平时暂存后我们习惯执行git commit -m 提交信息但这里的目标是修订上一条提交所以改为git commit --amend这条命令会打开文本编辑器让你编辑提交信息——你可以修改它也可以原样保留直接退出。 4.退出编辑器。 5.推送到远程git push origin branch-name最终效果两次改动原来的改动 新补的单词被合并进同一条提交里历史中不再出现那条多余的b0ca8f。四、修改已经推送的远程提交强制推送与安全警告上述流程有一个隐含前提需要单独讨论如果这条提交已经推送到了远程仓库那么--amend会在本地创建一个新提交并替换掉旧提交导致本地历史与远程历史发生分叉因为 commit hash 变了远程上仍是旧的提交对象。要让远程也反映这个修订就必须用强制推送覆盖远程分支的历史。完整操作如下git add your changed files git commit --amend -m 你的新提交信息 git push --force警告原版教程第 55-56 行明确标注强制推送到远程会**覆盖并丢弃**远程上已有的更改只保留你推送的提交。其他团队成员在此期间推送到远程的更改同样会被覆盖。因此强制推送本质上是一次有风险的历史重写操作仅在你明确知道自己要覆盖哪些内容时使用切勿在共享分支上随意执行。更安全的替代--force-with-leasegit push --force-with-lease--force-with-lease会在推送前校验远程分支是否仍是你上次 fetch 时的状态如果远程分支在此期间被其他人更新过推送会被拒绝从而避免意外覆盖他人的改动。在多人在同一分支协作时这是比裸--force更稳妥的选择。五、本地未推送场景可以放心反复 amend需要特别澄清一个常见的认知盲区只要提交还没有推送到远程你就可以无限次地使用git commit --amend。此时没有远程历史需要覆盖--amend只影响本地仓库零风险。first-contributions 的进阶资料索引对此的总结是你可以持续 amend直到把提交推送到远程仓库为止。这正是 amend 的最佳使用窗口——在 push 之前把最近一次提交打磨到完美再推出去。六、在 first-contributions 协作流程中的实际用法把这个技巧放回项目语境你在本地完成了对Contributors.md的修改并提交参见 README.md 的 Make necessary changes and commit those changes 章节但在git push之前发现提交信息把名字拼错了。此时git commit --amend -m Add your-name to Contributors list git push -u origin your-branch-name既修正了信息又不会在 Pull Request 里留下冗余的修正提交。而如果你已经推送了分支、Pull Request 也已创建再发现问题时就需要走第四节中的强制推送流程并优先使用--force-with-lease。七、速查表场景命令是否影响远程修改最近提交的提交信息不开编辑器git commit --amend -m 新信息未推送前不影响已推送需强制推送修改最近提交的提交信息开编辑器git commit --amend同上把遗漏改动并入最近提交git add file后执行git commit --amend同上已推送后覆盖远程历史git push --force覆盖远程有风险已推送后安全覆盖远程历史git push --force-with-lease覆盖远程但拒绝覆盖他人新改动核心要点回顾①--amend只作用于最近一次提交会替换 commit hash② 未推送前可以放心反复 amend③ 已推送后的 amend 必须配合强制推送此时--force-with-lease优先于--force④ 小改动用 amend 合并、大改动新增提交保持提交历史的清晰与可读。延伸阅读本文对应的土耳其语原版教程位于 docs/additional-material/translations/Turkish/amending-a-commit.tr.md英文原版位于 docs/additional-material/git_workflow_scenarios/amending-a-commit.md它隶属于 土耳其语进阶资料索引 与 英文进阶资料索引。与该主题相关的其他 Git 进阶场景还包括撤销本地提交、回滚已推送提交、合并多个提交squash以及保持 fork 与上游同步可在需要时按图索骥。【免费下载链接】first-contributions✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表