当我尝试通过Visual Studio查看Git History时,我收到以下错误消息。
运行命令git fschk
后,我可以识别由于提交没有关于作者和日期信息的信息而导致的以下错误。
error in commit 8b47c4645d38edf9f8d104c3b6cc9e015fd5cdd4: missingEmail: invalid author/committer line - missing email
在尝试获取gitk
expected integer but got "Bruno" expected integer but got "Bruno" while executing "ParseFormatArgs {*}$args" (procedure "::tcl::clock::format" line 6) invoked from within "clock format [lindex $d 0] -format $datetimeformat" (procedure "formatdate" line 25) invoked from within "formatdate [lindex $info 2]" (procedure "selectline" line 87) invoked from within "selectline $l 1" (procedure "selcanvline" line 18) invoked from within "selcanvline .tf.histframe.pwclist.canv 189 109" (command bound to event)
我怎么能解决这个问题?
答案 0 :(得分:4)
不幸的是,(1)gitk无法处理错误提交和(2)您无法更改任何提交。这为您提供了两个选项(除了“不使用无法处理问题的工具”之外):
实际解决问题:将存储库复制到一个没有错误提交的新的不同存储库。如果此存储库是新的,以便其他存储库不依赖于从中获取的提交哈希ID,则这可能是最佳方法。 (由于某种原因,您已经标记了此svn以及git,因此请注意,我没有在两者之间来回转换的经验,如果您重写已转换的存储库会发生什么情况,但我希望不能很好地工作。)
这通常需要运行git filter-branch
,这有点难以使用。搜索StackOverflow以获取使用filter-branch的示例,或者查看底部的链接问题。
关于问题的论文:使用git replace
为错误提交添加替代提交。替代提交将与错误提交完全相同,除了它将具有有效的作者和提交者行。当Git去查看糟糕的原始提交时,它会将其“眼睛”转向替换,而是看到好的提交。替换的缺点是它们不会自动复制到新克隆(但是之后可以手动复制它们)。
请注意,实际解决问题的一种方法(也许是最简单的方法)是使用git replace
来覆盖它,然后使用git filter-branch
来使替换永久化。这类似于VonC对What does git filter-branch with no arguments do?