早些时候,我提交了一些当时似乎是个好主意的代码,但事实上它使事情变得更糟。我想从历史记录中删除更改,因为它没有帮助,并且自那以后重新提交所有提交 - 它们应该合并而没有问题。
我尝试在错误提交(使用gitx)之前立即创建一个新分支(称为newMaster
),检查并运行:
git rebase -i master
哪个AFAICS应该给我一个关于master的提交列表以及合并或不合并它们的选项,但是它说noop,并且快速转发newMaster等于master。
什么是最简单的方法来做我需要的?
答案 0 :(得分:29)
执行所需操作的最简单方法是继续(或重新签出)要编辑的分支并运行此类内容。
git rebase --onto <sha1-of-bad-commit>^ <sha1-of-bad-commit>
这将自从错误提交到错误提交的父级之后将所有内容重新绑定,从而有效地从当前分支的历史记录中删除错误的commiit。当然,如果发生任何冲突,您将需要解决这些冲突。
答案 1 :(得分:13)
git rebase -i
是正确的命令,但您希望从具有最新更改的分支执行此操作,并传入作为rebase操作的“基础”的修订(在错误提交之前的修订) )。因此,如果您创建了一个指向上一次良好提交的分支last-good-commit
,您可能希望在master
上运行以下内容:
git rebase -i last-good-commit
答案 2 :(得分:2)
使用rebase
,我无法将更改推送到遥控器,并且每次拉动都取消了我的rebase。
我成功地恢复了一个精确的提交(不是最后一个),简单地说:
git revert <sha-of-bad-commit>
然后我也能够推动远程