GIT如何修改author date和commiter date

需要使用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'

然而并没有起作用,脚本正常运行完,日期还是没有变化。
有没有处理过类似问题的兄弟望赐教!


慕桂英4014372
浏览 1436回答 1
1回答

三国纷争

自己来答吧,最后选用了这个办法: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命令,根据命令的不同的输出进行不同的输入,还在测试中,就不展开说了。
打开App,查看更多内容
随时随地看视频慕课网APP