2.3 修改 Git 历史记录之 git commit ‐‐amend 学习 - hust-open-atom-club/TranslateProject GitHub Wiki
HCTT 项目审核 PR(Pull Request)的时候,经常会发现一些同学在解决 comments 的时候都是通过追加一个新的 git commit 来完成,鲜少有同学直接修改 PR 中的 Git 历史提交来完成。这时候有同学就要问了,我们为什么要这样做呢?因为这样从作者侧看到的 Git 提交记录非常干净。本文就将介绍一下如何使用 git comment --amend
来修改已经提交的 PR 中的最后一个 Git 历史提交。注意,git commit --amend
只能修改最后一个 Git 历史提交,如果需要某个中间的 Git 历史提交,那需要 git rebase。我们留到下次来讲述。
这里我将用自己 fork 的 mudongliang/TranslateProject
仓库,编写一个简单的 PR 来讲述,正好也趁着这个机会给大家介绍我的 Github 使用习惯(虽然不是最好,但是也值得大家借鉴)。
- 更新本地的
TranslateProject
到最新
git pull
- 切换到一个新的分支
translate_db_md
开始做翻译或修改文件
git checkout -b translate_db_md
- 根据
TranslateProject
的 Wiki 要求开始翻译,这样只是作为 demo,所以我仅作翻译请求的 PR。
---
status: translatig
title: "syz-db"
author: Syzkaller Community
collector: mudongliang
collected_date: 20240428
translating_date: 20240829
priority: 10
link: https://github.com/google/syzkaller/blob/master/docs/db.md
---
为了后续要做 PR 修改,我故意放了一个 typo - translatig,无法通过 CI 检查。
- 提交本地 commit,并推送到 Github 仓库
git add sources/syzkaller/db.md
git commit -m "request to translate syzkaller/db.md"
- 将本地分支提送到
mudongliang/TranslateProject
Github 仓库
git push --set-upstream origin translate_db_md
是不是觉得这个命令好长,很难记?不用担心,git push 命令会给我们提示,或使用配置自动化这个工作。
- 下面我们按照 Wiki 中的步骤提交 PR,如下所示,
https://github.com/hust-open-atom-club/TranslateProject/pull/201
- 很快,上游仓库中 TranslateProject CI 会通知我们说,有一个测试没通过。此处要感谢俱乐部_常续本_同学为 HCTT 项目编写 CI。
- 接下来,在介绍如何修改 PR 中的 git 提交之前,我们简单说一下 git commit --amend 的两个功能
- 修改最后一次提交的 log message;
- 修改最后一次提交的文件修改;
我们这次将使用后者修改 PR status,详细见后续步骤。
- 修改 typo,并使用git add将该文件加入暂存区
git add sources/syzkaller/db.md
- 使用
git commit --amend
来修改之前的 git 提交记录,此时,本地的 git status 如下所示
- 最后,通过
git push -f
来更新mudongliang/TranslateProject
Github 仓库,此时 PR 会同步更新,如下所示,大家可以发现,PR 中此时还是只有 1 个 git commit。
- 上游 CI 观测到 PR 更新会重新开始检测,但是仍然有错误。我们只需要重复之前的操作,修改文件内容即可
- 最后我们添加了 translator 之后,CI 终于过了
结语:目前很多开源仓库(如 Syzkaller)都会要求 Git 仓库提交历史尽可能干净,所以大家需要掌握这个技能让自己在开源项目贡献中走得更远。