跳转至

修改过去的commit

问题情景

当我们发现在过去的某个commit上出现代码错误(各种),我们希望做修改,但是为了commit信息的有序,我们又不希望继续在Head后修改,这时可以使用git rebase对某个commit做修改。

Warning

注意,对某个commit的修改不能影响到后续的commit。比如某行代码上某个变量名写错了,但是在未来的commit中,这行代码没有任何修改,那么你可以使用git rebase回去修改。

但是,如果你删除了过去commit中的某行,导致行号变化等问题,可能影响后续commit记录发挥正常作用,这个时候就不能使用git rebase修改。

步骤

1.查看git log

使用下述命令查看commit的简要信息。并确定你要修改的commit距离HEAD有几个commit。

git log --oneline

git rebase

如果要修改的commit为HEAD的上一个,就git rebase -i HEAD~2

如果要修改的commit与HEAD之间有n个commit,则命令为:

git rebase -i HEAD~a # a = n+2

执行rebase命令后,你会进入一个文件,这是一些命令,将你要修改的commit前的pick 修改为 edit

edit abc123 Fix typo in readme
pick def456 Add new feature
pick ghi789 Update docs

修改文件

现在,你可以在你要修改的commit处的文件进行修改,修改完成后,add文件,然后commit,如下:

git add <file>
git commit --amend

结束修改

git rebase --continue

此时,你的本地git仓库就完成了修改。如果之前没有push到远程仓库,直接push就行。如果之前已经push到了远程仓库,若有多人协作,必须在与他人沟通的情况下,强制push

git push --force-with-lease