乔治·奥威尔有言
历史不是一面镜子,而是黑板上的记号,可以随时擦去,随时填补。更为可怕的是,一旦涂改了,你找不到证据去证明这是篡改历史的行为。
Git会追踪每一次commit的历史记录,如果之前不小心配置错了用户名,那么有办法改掉吗?
当然了办法是有的,改掉commit username和email是很容易的,不就是这么几行嘛?
git rebase -i f25f719f7c2333d310696c3ed41e5a90ed078e55
弹出的交互式窗口,把要改的commit从pick
改成edit
然后不停地
git commit --amend --author="Cool <[email protected]>" --no-edit && git rebase --continue
就可以了
事实果真如此吗?git push -fv
试试看?
妈勒个巴子,时间不对啊,明明是Feb的怎么就变成了现在的时间了。这不就露馅了吗!
千辛万苦找到一个名字叫git-filter-repo的东西,试了一下是可以的。
先安装,比如说 apt install git-filter-repo
然后创建一个mailmap
文件,格式如下
New <[email protected]> BennyThink <[email protected]>
如有需要可以写多行
然后
git filter-repo --mailmap /etc/mailmap
然后再push,如果遇到缺失remote的问题,重新添加一下
git remote add origin https://github.com/tgbot-collection/history git push --set-upstream origin master -fv
优秀吧!全变成对应的名字和邮箱了,并且commit的时间也没有改变。git log
和GitHub是一致的。
如果想要只改几个commit的邮箱,那怎么办呢?
比如说只想改前两个
git filter-repo --refs master~2..master --mailmap /etc/mailmap
如果想改某个中间的一些commit的邮箱为某个人、并且还不改变GitHub上显示的时间呢?甚至不敢确定这种是否可行😂
emmm这个我还不太知道,其实不太知道refs是什么意思,尝试了很久也不行
看到git-filter-repo里写着
git filter-repo ... --refs C..H git filter-repo ... --refs C..H ^D git filter-repo ... --refs D..H ^C
H应该指的是HEAD?
总之,暂时够用了😂