git rebase -i 重新提交多个commit之前的commit

本文介绍如何使用Git回退到特定提交并修改其内容。通过执行rebase命令结合-amend选项,可以有效地更改已提交的代码。文章详细说明了整个过程的步骤,包括如何编辑指定的提交以及如何继续rebase流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

若本地已经提交commit A,B两个,但发现A需要更改后重新提交。
1,本地执行 git rebase -i HEAD~2 (索引从1开始,同理若更改前n次的commit,此处改为n即可)
结果如下图

这里写图片描述

2,在要更改的commit,将pick改为edit,保存退出即可,如下图

这里写图片描述

3,退出后,就会停在A commit,如下图。

这里写图片描述

4,,此时就可以进行修改,然后 依次执行
git add *(需要更改的文件)
git commit –amend
5,amend后用git status . 查看一下状态

这里写图片描述

6,执行 git rebase –continue 提示 Successfully rebased and updated,并git log 查看是否恢复到当前初始状态。如上图
7,最后执行git push操作

<think>好的,我现在需要回答用户关于如何使用gitrebase-i剔除指定commit的问题。首先,我得回忆一下gitrebase-i的基本用法和相关选项。用户提到的是要剔除某些提交,而不是合并或修改,所以应该涉及到在交互式rebase中将pick改为drop或者d。根据引用中的内容,特别是引用[3]和引用[4],提到了使用rebase的drop命令来移除特定的commit。引用[3]直接说明用d来移除commit,而引用[4]详细展示了如何找到要删除的commit之前的那个commit,然后执行gitrebase-i,将pick改为drop。所以用户的问题应该可以通过这些步骤解决。首先,用户需要确定要删除的commit的哈希值或者位置。比如,用户可能想删除中间的某个提交,比如提交B,而保留A和C。这时候,用户需要运行gitrebase-iHEAD~n,其中n是包含要删除commit的范围。例如,如果最近的三个提交是A、B、C,那么运行gitrebase-iHEAD~3,然后在列表中将B对应的行改为drop或者d。需要注意的是,在rebase过程中,起点commit会被排除,所以用户需要选择正确的起点。例如,引用[4]中的步骤是先找到要删除的commit之前的一次提交,然后执行gitrebase-i<commit-hash>,这样在编辑界面中就会列出该commit之后的提交,方便用户进行删除操作。另外,引用[5]提到了--onto参数,这可能用于更复杂的情况,比如将某个分支的一部分提交转移到另一个位置。但用户的问题可能不需要用到这个选项,除非需要调整提交的位置。还需要提醒用户,使用rebase修改历史后,如果已经推送到远程仓库,可能需要强制推送(gitpush--force),但这在公共分支上是不推荐的,容易引起其他人的问题。此时应该建议用户仅在个人分支上使用这种方法,或者使用gitrevert来保留历史记录,如引用[1]中提到的。总结步骤应该是:1.使用gitlog确定要删除的commit及其之前commit;2.执行gitrebase-i<之前commit-hash>;3.在编辑界面将目标commit的pick改为drop;4.保存退出,完成rebase。同时,要注意可能出现的冲突和处理方法。可能的相关问题包括如何处理rebase中的冲突,或者如果删错了commit如何恢复,以及gitrebase的其他用途。需要确保回答清晰,步骤正确,并参考了提供的引用内容。</think>在Git中,使用`git rebase -i`剔除指定commit的方法如下: ### 操作步骤 1. **确定目标commit范围** 通过`git log`找到要删除的commit的哈希值(例如`a53bcb5`),并记录它之前commit哈希值(例如`0148079`)[^4]。 2. **启动交互式变基** 执行命令: ```bash git rebase -i <目标commit之前的哈希值> ``` 例如: ```bash git rebase -i 0148079 ``` 3. **标记要删除的commit** 在打开的编辑界面中,将目标commit行的`pick`改为`drop`或`d`[^3][^4]: ``` pick 0148079 A drop a53bcb5 B # 删除B的提交 pick 1fb3f31 C ``` 4. **保存并退出** 按`Esc`键退出编辑模式,输入`:wq`保存更改。此时Git重新应用剩余commit,完成历史重写。 5. **处理冲突(如有)** 若出现冲突,需手动解决后执行`git add`和`git rebase --continue`。 ### 注意事项 - **适用场景**:适用于个人分支或未推送的提交。若已推送到公共分支,建议改用`git revert`保留操作记录[^1]。 - **风险提示**:修改历史可能导致协作问题,强制推送需谨慎(`git push --force`)。 ### 示例场景 假设提交历史为`A → B → C`,需删除B: 1. 执行`git rebase -i A`(或`git rebase -i HEAD~3`)。 2. 将B的`pick`改为`drop`。 3. 保存后历史变为`A → C`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值