使用git commit修改历史提交记录

本文介绍了如何在Git中修改历史提交记录,包括使用git commit --amend修改最近提交,通过git rebase -i编辑中间提交,以及将工作空间的改动追加到特定commit上。同时分享了关于git stash、解决冲突和回退commit的小知识。

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

 一、背景

       使用git开发过程中,我们可能遇到提交多个commit的情况,如下图所示,但当做测试的时候察觉某次commit有bug,此时又不想新提一个commit来解决这个问题,这时候该怎么办?

public class Test {
    public void test(){
        System.out.println("A");
        System.out.println("B");
        System.out.println("C");
        System.out.println("D");
    }
}
提交记录:A->B(存在bug需要修改)->C->D(存在bug需要修改)

 二、解决方式

git log 查看历史提交,可以看到A、B、C、D的提交记录

2.1.最近的一次提交D存在问题

  ①修改问题代码:

public class Test {
    public void test(){
        System.out.println("A");
        System.out.println("B");
        System.out.println("C");
        System.out.println("D(修复D的Bug)");
    }
}

 ②使用命令:

  • git add .
  • git commit --amend

       此时进入vim编辑器,如左图所示;输入"i"进行修改,"esc"键退出修改,修改完输入":wq"进行保存,如右图所示:

       此时可以使用git log查看修改:

2.2.中间的提交B存在问题

①使用git rebase -i HEAD~n或者git rebase -i 7位的head头^

  • it rebase -i HEAD~3

进入左图的vim编辑器,输入"i"进行修改,将要修改的commit记录的pick修改成"e"或者"edit","esc"键退出修改,":wq"保存修改,如右图:

 ②修改问题代码

public class Test {
    public void test(){
        System.out.println("A");
        System.out.println("B(修复B的Bug)");
    }
}

③使用命令

  • git add .
  • git commit --amend

此时进入了vim编辑器,输入"i"进行修改,"esc"键退出修改,修改完输入":wq"进行保存,如下图所示。

 ④git rebase --continue

此时如果有冲突, 需要先解决冲突:

  • 编辑冲突文件, 解决冲突
  • git add .
  • git rebase --continue

      此时进入左图的vim编辑器,直接输入":wq"即可,如右图:

      此时显示成功变基并更新如左图示,代码更新如右图示:

此时使用git log查看历史记录如下图所示: 

三、将工作空间的改动追加到某次commit上

在工作空间中将System.out.println("A")做出了部分修改

①使用git stash将工作空间的改动就行保存或者使用Shelve Changes进行保存

git rebase -i HEAD~n找到需要更改的commit, 将行首的pick改成edit, 按esc, 输入:wq退出

③使用git stash pop或者Unshelve还原工作空间的改动

 修改存在的冲突

git add .git commit --amend提交修正

git rebase --continue

修复冲突

使用git add .git rebase --continue不断修复冲突

git log查看

一些小知识

HEAD^的表示上一个版本,也可以写成HEAD~1,如果你进行了2次commit,都想撤回的话,可以使用HEAD~2,以此类推。
②如果是commit注释写错了,只是想改一下注释,只需要执行命令行:git commit --amend。此时会进入默认Vim编辑器,修改完之后保存即可。
③撤回commit后又后悔了,不想撤回了…。此时可以通过版本号来回退,先使用 git reflog 命令来获取版本号,再使用 git reset --hard 版本号 命令来恢复。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值