注意:修改已经 push 的 commit 是一个潜在的危险操作,因为会改变仓库的历史记录。如果你的 commit 已经被其他人 pull 或者合并过,最好避免修改 commit。
修改commit
- 首先,使用
git rebase
命令来进行交互式 rebase:
git rebase -i HEAD~n
这里的 n 表示你想要修改的 commit 之前的 commit 数量。比如你想修改最近的3个commit就是git rebase -i HEAD~3,不传n就是默认最新的1条。
-
在接下来的界面里,找到你需要修改的 commit 的行,按任意字母键开始编辑。
如果只需要改commit的描述就将pick
改为r
或reword
,然后直接保存即可,不需要下面的第3第4步。
如果需要修改commit本身的文件内容就改为e
或edit
,按下ESC键,输入:wq保存并退出编辑器。
-
使用edit时,同时需要修改commit 的信息,使用–amend命令:
git commit --amend
- 完成编辑后,使用以下命令继续 rebase 操作:
git rebase --continue
如果想取消这次对commit的变更可以
git rebase --skip
在推送前如果想要整个退出rebase使用
git rebase --abort
- 最后,使用以下命令将修改后的 commit 强制 push 到远程仓库:
git push origin branch-name --force
使用–force需要非常谨慎,因为这个命令会直接把你当前分支同步到远端,覆盖所有后续提交的代码,因此这里也可以用
git push origin branch-name --force-with-lease
–force-with-lease 选项会在推送时先检查远程仓库是否有新的提交,如果有的话,推送操作将被拒绝,以免引起代码冲突或覆盖他人的更改。
合并多个commit
第1步和上面一样,在第2步把 pick
改为 s
或squash
,这里要注意比如你要合并3个commit,只需要改后面两条为s
,第一条保持pick
不要改,这两条会合并到最上面的一条里。
然后一样是:wq保存,最后git push --force-with-lease推送即可。