为了账号安全,请及时绑定邮箱和手机立即绑定

GIT如何修改author date和commiter date

GIT如何修改author date和commiter date

慕桂英4014372 2018-07-08 20:22:16
需要使用gitlab的merge request方式,在尝试new Merge Request时gitlab页面报错,经过查看gitlab后台日志,显示“Rugged::OdbError (Failed to parse commit aef3846d6401d68asdfsdf281c39cb584b812d - cannot parse commit time):app/services/compare_service.rb:11:in `new'app/services/compare_service.rb:11:in `execute'app/controllers/projects/compare_controller.rb:13:in `show'”看了这个commit ,author_date和commiter_date是2099年(没错,这个项目之前是开放修改的,开发人员为了自测改了本地日期,commit时忘了改回来了)。总之,这个项目上有一些commit都是这两个日期在当前日期之后的,估计是这个日期影响了compare,现在尝试把它们改回来。查看了很多资料,觉得git filter-branch应该能够解决这个问题,尝试了如下脚本:git filter-branch -f --env-filter '    if [ $GIT_COMMIT = aef3846d6401d68asdfsdf281c39cb584b812d ]   then        export GIT_AUTHOR_DATE="Mon Jun 25 14:13:00 CST 2018"        export GIT_COMMITER_DATE="Mon Jun 25 14:13:00 CST 2018"    fi'然而并没有起作用,脚本正常运行完,日期还是没有变化。有没有处理过类似问题的兄弟望赐教!
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

自己来答吧,最后选用了这个办法:

git rebase -i xxxxxx^

其中xxxxxx是错误的提交的commit_hash,然后在出现的pick编辑器中,将xxxxxx前面的pick改为edit;
这样在做rebase时,遇到指定的commit,会停住进行交互,执行下面命令对commit进行编辑:

GIT_COMMITTER_DATE='2018-07-12 00:00:00' GIT_AUTHOR_DATE='2018-07-12 00:00:00' git commit --amend --no-edit --date '2018-07-12 00:00:00'

修改commit的日期,然后git rebase --continue

完成rebase后 git push --force

说起来简单,实际实现起来,由于提交历史太多了,几千条,其中日期错误的零零散散几十条,所以git rebase -i 的时候选取最早一次出现的错误commit,然后在编辑器里把需要修改日期的commit都改为edit,再进行交互,由于可能有合并冲突的,可能有新增文件的需要git add .的,几千条中需要不停的人机交互......

又捣鼓了很长时间,用java写了个程序,执行shell命令,根据命令的不同的输出进行不同的输入,还在测试中,就不展开说了。


查看完整回答
反对 回复 2018-07-14
  • 1 回答
  • 0 关注
  • 1435 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信