git 修改已提交的 commit

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git 修改已提交的 commit相关的知识,希望对你有一定的参考价值。

参考技术A

修改历史的操作,原理上都是通过变基(rebase)实现的。

因为发生了修改,则每个涉及的 commit 都会计算出新的 SHA-1 校验和。

不使用 --force 选项,最好 不要修改已经推送到远端的 commit! 这样会与其他工作者产生冲突。

摘录自官方文档 Git v2 重写历史

只对最后一次 commit 做修改是比较方便的。

这个命令会使用当前暂存区的内容,覆盖最后一次的 commit,还允许你修改 commit 附带的 message。

通过交互式的变基操作 git rebase -i 可以在任何想要修改的 commit 处暂停,修改后再继续。

这是一个变基命令,在你确认变基后 HEAD~3..HEAD 范围内的每一个提交都会被重写,无论你是否修改过它。

假设此时的 git log 是

上文的命令会打开文本编辑器,展示如下的列表

格式为 <command> <commit> <message> 。

命令有短长两种写法

变基命令非常灵活,你可以在文本编辑器中改变 commit 的顺序,删除 commit 或者引入其他 commit,只要使得编辑后的变基操作列表能够正常运行即可。

因为 edit 命令而暂停了变基时,你可以执行各种操作,比如:

修改妥当后,输入 git rebase --continue 继续变基。

修改已push到远端的commit

参考技术A

背景 :当我们将commit提交到远端后,发现提交的commit message并不符合规范,需要修改,就需用到以下方法进行修改。

1.修改最近一次提交commit message

直接使用命令 git commit --amend 进入 vi编辑模式

按i进入编辑模式,直接修改commit信息, 按esc再:wq保存退出

git push 到远程仓库

2.修改历史commit message

先使用git log 查出你所需要修改的commit位置,比如倒数第三条

使用命令:git rebase -i HEAD~3 (其中3就是commit倒数位置)进入vi编辑页面

其中git log中倒数第n条就显示在该编辑页面的最新第1条

按i进入编辑模式,将需要更改的commit的pick改成e/edit, 按esc再:wq保存退出

如遇到:(dev|REBASE 1/3),则只需在需要修改的rebase序号(此处就是1)是执行git commit --amend

进入VI编辑页面,修改commit信息, 按esc再:wq保存退出

然后执行git rebase --skip跳过不需要修改的rebase分支,执行成功。

最后执行git rebase --continue命令完成rebase修改

最终push 到远程,至此,修改完成。

tips: 若进行到(dev|REBASE 1/3),中的一个阶段想退出此流程,执行命令git rebase --abort退出rebase 到主分支

push 到远端时,若执行git push, 则只会在之前的commit记录后追加一条记录,但不会更新之前的commit信息

若执行git push -f ,强制推送,则会更新之前的旧commit信息,进行覆盖

以上是关于git 修改已提交的 commit的主要内容,如果未能解决你的问题,请参考以下文章

git修改已提交commit的内容

Git 修改已提交的commit注释

Git修改已提交的commit注释

git commit时暂时忽略已提交的文件

修改已push到远端的commit

git commit 仅将修改的文件作为原子提交,然后仅将已删除的文件作为单独的原子提交提交