怎样修改 commit user ?
问题描述
git的 user.name 和 user.email 配置错了,然后还提交了很多commit,怎么办?
不要慌,git支持修改历史commit记录的用户名和邮箱。
思路
参考Changing author info,使用脚本进行修改。
实现
以macos上操作为例。
1、clone项目
1 | git clone --bare https://github.com/user/repo.git |
2、创建修改用户名的脚本 change-author.sh
1 | #!/bin/sh |
其中 OLD_EMAIL、CORRECT_NAME、CORRECT_EMAIL 三个变量需要替换。
3、执行脚本sh change-author.sh
4、检查结果,强制同步到远程仓库
1 | git log |
怎样修改上次 commit message ?
问题描述
git commit -m "something"
,之后,想要修改“something”为“something_new”。
解决办法
使用git commit --amend
,可以修改最后一次commit的附加信息。
怎样合并多次 commit ?
需求
最近三次提交:
- 第一次以为完成了,commit message写了“完成了xxx功能”。
- 结果发现有bug,修复后第二次提交,commit message写了“修复xxx功能的bug”。
- 结果发现还有bug,修复后第三次提交,commit message写了“修复xxx功能的bug”。
这样的三次提交,没毛病,但是可以美化一下,合并成一次提交。
操作步骤
1、合并最新三次的提交
1 | git rebase -i HEAD~3 |
自动进入vi编辑模式,此时看到的commit信息是按照时间顺序排列的,最新的commit在最下面。
按照提示的命令编辑commit信息,一般改成p s s
即可。
如果修改完报错:error: cannot ‘squash’ without a previous commit
那么可以继续修改:
1 | git rebase --edit-todo |
2、解决冲突后提交(不使用git commit)
1 | git add . |
3、取消rebase
1 | git rebase --abort |
怎样删除某次 commit ?
需求
已知一些提交记录为:
1 | commit efaec33c2a081e427c5201898b3fc61179475f69 |
现在想要删除 550ae58fc222c5c4cd99027a580423d2567969e6 这次commit,该怎么操作?
操作步骤
1、rebase到要删除的commit的前一个commit
1 | git rebase -i f3e9a940df8371d5282f151a5c6e6e74a1e3dead |
2、找到删除的commit(第一个),标记为 drop,保存
1 | drop 550ae58 add: xxx |
3、解决冲突后提交(不使用git commit)
1 | git status |