清理git repo *和*在邪恶行为后保留提交

时间:2012-03-13 00:46:03

标签: git github

我在github做了一个邪恶的事情:使用rebase,然后推--force。这是因为我想更改与我的提交相关联的名称,并将其反映在存储库中。

正如其他地方所警告的那样,这会对其他上游或下游回购产生影响。

我看到的结果是在合并后的上游仓库中出现了重复的提交消息。

我们有以下结构:

主要(相当不活跃)       - 邪恶(非常活跃)       - 其他人(非常不活跃)

我的问题是:如果已经有一些提交,我如何让Main进入良好状态。我建议的行动计划是:

  • git clone Main
  • git reset [pre-merge-commit]
  • git stash
  • git push --force
  • git stash pop
  • git push

我有点不愿意这样做而不确定它会(a)解决问题和(b)不会造成更多灾难。 'Evil'存储库一直非常活跃,因为它执行了自己的重置/推送,我认为它们需要做类似的事情:

  • git pull
  • git reset [max-commit-that-still-exists-on-Main]
  • git stash
  • git push --force(将'Evil'恢复为Main中存在的状态)
  • (从Main中提取东西并正常合并)
  • git stash pop
  • git push(应用本地更改)

这是对的吗?

最后,'Evil'存储库在执行重置/推送后完成了许多提交。是否有任何方法可以确保在使用Main重新同步时保留所有提交消息?

1 个答案:

答案 0 :(得分:1)

从你所描述的内容来看,我想说你最好的选择可能是你评论中提到的第二种可能性 - 即继续修改“邪恶”直到它尽可能准确,然后有“主”重置到邪恶的地方。任何下游用户都可以(使用--onto标志)从“邪恶”改为“新世界秩序”。