我们有2个分支:主和免费。大部分代码都是用 master 编写的,并合并为 free (不是其他方式)。现在,在某些时候出现问题:应该只在分支免费的代码现在出现在 master 中。似乎有人将免费合并到主(或在主人之上重新免费)并推送它。这很愚蠢,但我们无法确定何时发生这种情况以及哪些提交(提交)引入了此错误。
对于如何从这种情况中恢复,我将不胜感激。
答案 0 :(得分:1)
您可以使用-S<search-string>
选项git log
查找从文件中添加或删除特定字符串的提交.¹因此,如果您知道ToasterFactory
类仅被引入在free
分支上,您可以执行以下操作以查看哪些合并提交将其带入master
:
git log -SToasterFactory --merges master
...或者如果它可能是由一个rebase或者cherry-pick引入的,你可以这样做:
git log -SToasterFactory master
如果是从master
引入所有更改的合并提交,您可以尝试恢复该合并提交,例如用:
git revert <SHA1-OF-MERGE-COMMIT>
关于这一点的一个注意事项是,如果您以后想要重新合并,则可能需要revert the revert first。
¹严格地说,此选项仅返回特定文件中该字符串出现次数的提交。使用git 1.7.4或更高版本,您可以使用-G
选项。
答案 1 :(得分:0)
最后,我通过以下简单步骤恢复了主分支。
可能最重要的部分是认识到rebase毕竟不是那么具有破坏性。它破坏了历史,但不是树。所以,总有一个提交你可以恢复。