这是我悲伤的故事
今天我犯了一个错误,就是从另一个存储库中拔出来。我正在使用Repository A,我将Repository B的内容提取到A.我这样做是因为我想要来自该Repository的一些文件。
之后我将我的存储库推送到远程。
我的问题不是我的代码,因为两个存储库都不同。但问题在于历史。
现在,我的远程存储库可以被公众看到,它具有存储库B中提交的所有历史记录以及日志中的提交。
如何从历史记录LOG中删除这些提交?
有没有办法将我的存储库重置为像昨天这样的状态?这会导致我历史记录中存储库B的提交消失吗?
我尝试重置Merge,Use Re-base和Cherry-pick,但两种情况都没有删除历史记录。
感谢您的时间
答案 0 :(得分:1)
如果您知道昨天所有分支机构的位置,您可以通过并将每个分支机构重置为原始位置。对于每个相关分支:
git checkout <branch name>
git reset --hard <old hash>
git push -f <repository A> <branch name>
然后,您可以删除任何不需要的新分支。对于每个这样的分支:
git branch -D <branch name>
git push <repository A> :<branch name>
如果其他人可能在此期间从存储库A中撤出,这一点都非常粗略。解决方案可能部分是社交的,也可能是技术性的 - 使用存储库的其他人可能需要被告知发生了什么,以便他们可以修复他们的本地克隆。
答案 1 :(得分:0)
git reflog
是你想看的地方。只要您暂时没有收集垃圾,您应该能够git reset --hard HEAD@{x}
使用x作为历史记录中要将本地分支中的所有内容重置回的特定点。
一旦你这样做,我会做git push --force
将你的公共回购邮件带回你想要的地方......
这有一个令人遗憾的问题,如果其他人已经从您的遥控器上撤下,他们的历史将会搞砸。
答案 2 :(得分:0)
谢谢大家。我已经解决了我的问题。我设法通过参考不同的文章和问题来解决它。
我将在这里解释答案以及我通过斗争学到的东西。
首先,为了有选择地删除分散在最佳方式周围的历史记录提交可以在此question的答案中找到:
特别是Charles Bailey的回答。最接近这个答案的是Stuart。
注意:恢复提交不会将其从历史记录中删除,重置确实如此。
至于我的特殊情况,我认为我必须按照前面的方法进行我不想要的每次提交,但实际上答案更简单。
在我的情况下,我必须在我提取存储库B之前将git重置为提交,并且必须为所有分支完成。完成后,B的所有不需要的提交都从我的历史中消失了。
另一个有趣的事情是,在许多提交中使用git Cherry-Pick或Revert并不像在线文章那样直截了当,对我来说最少。
谢谢大家。