最近公司建立一些关于commit的检测机制,导致很多代码在远程合并的时候,提示commit内容有误,这就导致很多commit需要去修改
这里就记录,希望对大家有所帮助
1.只修改最近一条
git commit --amend
键入命令就可以修改了 这时候我们会进入到vim 界面
这里就是window系统按insert 键插入 修改 ,mac系统没有insert 就按字母 i 就可以进入到 vim的 编辑模式
然后开始修改内容 修改完自己 合适的commit之后呢 ,就 esc 返回 然后键入
:wq
保存并返回即可,这样最近一条就被修改成功了
2.如果是要修改多条历史记录的情况下
首先
git log
查看历史记录
比方说我们要改到这一条
这时候我们就键入命令
git rebase -i 0ae22b7aee784931e882294cba25e7860a671131
就进入到下一个界面了
git rebase -i
这个后接的就是 你要修改的commit的 下一条 commit编号
同样的操作 insert 插入 或者 i
这里有几种修改选择:
- pick:保留该 commit
- reword:保留该 commit,但我需要修改该commit的 Message
- edit:保留该 commit, 但我要停下来修改该提交(包括修改文件)
- squash:将该 commit 和前一个 commit 合并
- fixup:将该 commit 和前一个 commit 合并,但我不要保留该提交的注释信息
- exec:执行 shell 命令
- drop:丢弃这个 commit
这里有一点要注意 不要在 这里 进行 commit 内容的修改 会识别不到 匹配内容导致无法更改
按照实际需要去选择命令,我们这里需要的是 reword,用来修改 Message。
只去修改 你想要修改的 commit内容就好了 然后esc
:wq
保存退出,就会逐个进入到你 刚才前面有 reword 的 commit 修改界面
然后逐个修改 :wq 保存就可以了
历史记录就可以提交了
假如你这里是在远程 拉下来的代码 提交到远程的时候会 提示代码冲突 因为 你本地的 commit 跟 git 仓库的 commit的记录是 不同的
如果你先 pull 再 push 这时候就本地的 commit 就会被线上的 commit记录全部覆盖 白改了
这时候就使用强制推送命令
git push --force --tags origin 当前分支名
强制推送到远程分支并覆盖 这样了话 远程的commit也就被修改了
补充一下 commit 常见的类型 格式
提交必须以类型为前缀,该类型由动词、feat、fix 等组成,后跟冒号和空格
- build:影响构建系统或外部依赖项的更改(示例范围:gulp、broccoli、npm)
- ci:对 CI 配置文件和脚本的更改(示例范围:Travis、Circle、BrowserStack、SauceLabs)
- chore:不改变源代码或测试的更改,例如对构建过程、辅助工具和库的更改
- docs:仅文档发生变化
- feat:一个新功能
- fix: 一个错误修复
- perf:提高性能的代码更改
- refactor:既不修复错误也不添加功能的代码更改
- revert: 恢复某些内容
- style:不影响代码含义的更改(空格、格式、缺少分号等)
- test:添加缺失的测试或纠正现有的测试
例子
build: update npm dependencyci: add circleci configuration filedocs: fix typo in foo.md and bar.mdperf: optimize database query for faster response timesfeat: allow provided config object to extend other configsfix: resolve issue with incorrect data renderingrefactor: reorganize code structure for better readabilitystyle: format code according to Prettier standardstest: add unit tests for user authentication
如果你想要更明确一点 可以指定范围
书写结构如下
范围是可选的支持多个范围
类型(范围?): 主题内容
build(deps): upgrade packagesstyle(deps): remove whitespace in requirements.txtfeat(lang): add Chinese language