需要使用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命令,根据命令的不同的输出进行不同的输入,还在测试中,就不展开说了。
- 1 回答
- 0 关注
- 1435 浏览
添加回答
举报
0/150
提交
取消