我在这个github repo工作:https://github.com/Sable/mclab
开发分支上的历史有点不稳定。结果如下:
- 环境糟糕的A推送了一些日期为1970年的提交。
- Person B试图将他的"脆弱"分支合并到develop并推送到github。但这发生了:https://github.com/Sable/mclab/compare/aa6e2c9d74...9209f45db4;好像每一次提交都被推送过。
现在的历史是奇怪的,例如https://github.com/Sable/mclab/commits/develop?page=58;您可以看到2008年的第一次提交,然后是1970年的提交,然后是(在下一页)最近的提交,这些提交应该位于历史记录的顶端。
我有两个问题:
- 到底发生了什么?我猜合并被1970年的提交搞砸了,但我不确定。
- "修复"事情的最佳方法是什么?我知道你不能撤销推;我希望发展的历史能回到这一切发生之前的样子。我可以在repo上做一些奇怪的手术来实现这一点。
这是我想出来的。
合并进行得很好——合并不依赖于时间戳(例如,git log --date-order
显示一个合理的顺序)。但是历史看起来很奇怪,因为时间戳决定了(在其他事情中)git log
中提交的默认顺序,显然GitHub中的提交比较视图。
我是这样做的:
- 从合并发生之前的
develop
分支开始(它确实有1970次提交)。 - 创建基于
develop
的新分支 - 在develop上运行
git reset --hard
,返回到1970年第一次提交的父进程 - 将新分支交互式地重设为"开发",为我想更改日期的所有提交选择"编辑",并为它们选择合理的日期 删除github上的开发分支
- 将新的开发分支推送到github
这似乎工作得很好,尽管我必须指导人们在拉之前要小心(要么克隆一个新的repo,要么重置回我在重新基于之前所做的相同的提交)。