在 master 上清理 git 历史记录的正确方法

Posted

技术标签:

【中文标题】在 master 上清理 git 历史记录的正确方法【英文标题】:Proper way to clean git history on master 【发布时间】:2017-01-29 15:28:43 【问题描述】:

我在“master”分支上。 我有这样的 git 历史:

333  (#82)
444  (#83)

然后我做了一些提交和还原(222->111->010->789->456->123):

123 Revert "(#84)"
456 Revert "(#81)"
789 Revert “(#81)"
010 Revert "(#86)"
111  (#86)
222  (#84)
333  (#82)
444  (#83)

我需要以某种方式清除那些错误的步骤 (222->111->010->789->456->123) 以将历史记录返回:

333  (#82)
444  (#83)

如果我这样做可以吗:

git rebase -i 333

并且会丢弃错误的提交? 那么

git push -f

【问题讨论】:

你推送提交和恢复了吗? How to revert Git repository to a previous commit?的可能重复 【参考方案1】:

假设您没有推送提交和恢复, 执行以下操作:

git reflog  

这将为您提供按时间倒序排列的操作列表(包括所有还原和提交)。找到最后一个稳定提交并以HEAD@somenumber 的形式找到它的头部。然后回退到该提交,请执行以下操作:

git reset --hard HEAD@somenumber

【讨论】:

我想他已经知道哈希了,也就是333,所以命令应该是git reset --hard 333

以上是关于在 master 上清理 git 历史记录的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

同步上游的提交时,如何在 Git 中清理提交历史?

使用git rebase的正确姿势

使用git rebase的正确姿势

Git 修改多个历史提交记录的 Author

合并后的 Git 分支和提交历史记录

如何执行 git revert 并删除合并历史记录?