Trac 和 git 在不同的范式上运行。Git 非常高兴允许您通过取消提交、重新排序修订等来更改历史记录。Trac 假设一个线性的、不可变的时间线(请记住,它是为与 Subversion 一起使用而设计的)。当您使用关闭票证的消息提交时,票证在 Trac 的数据库中关闭。当您重置提交时,Trac 不会返回并更新自己的时间线以匹配新的 git 时间线。重新同步是一个费力的过程(正如您所发现的),但这是您告诉 Trac 时间线已更改的唯一方法。
解决此问题的一种方法是让 Trac 监视与您用于开发工作的存储库不同的存储库。仅在您对 Trac 的存储库进行测试后才将更改推送到它们,并且可以相当确定您不必还原。从 Trac 的角度来看,这将使时间线保持线性,但仍允许您正常使用 git 的所有功能。
这实际上是任何系统都难以解决的问题。当您更改 git 存储库的时间线以影响使用工单打开/关闭命令(例如)的提交时,您可能会更改工单的工单编号或工单注释的顺序。这会破坏对这些项目的任何现有链接或引用。
确保您的存储库更改与您的问题跟踪器保持同步的一种方法是使用一个类似于bugs的系统,该系统将错误列表/详细信息存储在存储库中。像这样的工具通常不像 Trac 那样功能齐全,但它们的分布式特性可能更适合分布式版本控制系统。