[Git] 修改之前某次 commit 日志和内容

本文介绍如何使用Git的rebase命令结合stash功能,在不破坏历史记录的前提下,回到过去某一特定提交进行Bug修复的方法。
该文章已生成可运行项目,

Git version: 2.7.4
OS: Ubuntu 16.04

需求背景

将 A 功能从 branchA 合入到主分支 master 后过了很多个提交后,发现 A 功能某个地方有 bug,那最好的方法就是跳回到写 A 功能的时候进行修改。

这分为两个部分
1. 修改之前某次的 commit 信息
2. 修改之前某次的 commit 内容

实现方法

比如我现在的 git log 如下:

4fd65115db FUNCTION Mipi Camera Camera IC: OV13850 Interface: RX1
97a8ad0f7f FUNCTION 移植 8寸 Mipi LCD Driver IC: RM72014
9633cf0919 FUNCTION 移植 8寸 TP Driver IC:GT911

我现在发现当时移植 TP 的时候有 bug,我需要回到 9633cf0919 对进行 TP 进行移植的时候来修复这个 Bug。

我只需要这样做:

1、将当前分支无关的工作状态进行暂存

git stash

2、将 HEAD 移动到需要修改的 commit 上

git rebase 9633cf0919^ --interactive

3、找到需要修改的 commit ,将首行的 pick 改成 edit
4、开始着手解决你的 bug
5、 git add 将改动文件添加到暂存
6、 git commit –amend 追加改动到提交
7、git rebase –continue 移动 HEAD 回最新的 commit
8、恢复之前的工作状态

git stash pop
本文章已经生成可运行项目
<think>好的,用户想要取消Git中的所有提交历史,并重新开始提交。我需要仔细考虑如何安全有效地实现这一点,同时确保用户不会丢失他们的工作。 首先,用户可能希望保留当前的文件状态,但清除所有的提交记录。这通常用于创建一个干净的新仓库状态,或者重新组织项目历史。常见的做法是使用`git checkout --orphan`来创建一个没有父提交的新分支,然后将当前的工作文件添加进来,进行新的初始提交。这样旧的历史记录仍然存在,但可以通过删除原来的分支并重命名新分支来替代。 另外,用户可能希望彻底删除所有提交历史,包括远程仓库的记录。这时候需要强制推送一个空的分支到远程,但这可能会影响其他协作者,所以需要谨慎操作。例如,使用`git push origin --force`来覆盖远程分支。 还需要考虑用户是否已经将代码推送到远程仓库。如果已经推送过,直接删除本地历史并强制推送可能会覆盖远程的历史,导致其他人出现问题。因此,必须提醒用户注意这一点,并建议在协作项目中谨慎使用。 另外,用户可能担心操作过程中的数据丢失。因此,在步骤中需要强调备份的重要性,比如在操作前创建一个备份分支,以防万一出现问题可以恢复。 同时,用户可能需要详细的步骤说明,包括如何创建新分支、添加文件、提交以及清理旧的分支。此外,需要确保用户了解这些命令的影响,特别是在处理远程仓库时的强制推送操作。 最后,生成相关问题可以帮助用户进一步了解Git的其他操作,比如如何修改提交信息,如何合并提交,或者如何处理远程仓库的历史问题。这些问题应该与当前主题相关,帮助用户扩展他们的Git知识。</think>要清除所有Git提交记录并重新建立初始提交,可按以下步骤操作: ### 安全操作步骤 1. **创建新孤立分支** ```bash git checkout --orphan new_branch ``` 这会创建没有父提交的新分支,保留所有工作文件但清除历史[^1] 2. **添加所有文件** ```bash git add -A ``` 3. **创建初始提交** ```bash git commit -m "Initial commit" ``` 4. **删除原分支** ```bash git branch -D master # 或当前分支名 ``` 5. **重命名分支** ```bash git branch -m master ``` 6. **强制推送(如需要更新远程)** ```bash git push -f origin master ``` ### 注意事项 - 操作前建议备份分支:`git branch backup_before_reset` - 强制推送会覆盖远程历史,团队协作时需协调操作 - 保留的.gitignore文件需手动处理 ```bash # 完整命令流程示例 git checkout --orphan tmp_initial git add -A git commit -m "New initial commit" git branch -D master git branch -m master git push -f origin master ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值