33

早些时候,我提交了一些代码,这在当时看起来是个好主意,但实际上它让事情变得更糟。我想从历史记录中删除更改,因为它没有帮助,并重新设置所有提交,因为它们应该全部合并而没有问题。

我尝试在错误提交(使用 gitx)之前立即创建一个新分支(称为newMaster),检查它并运行:

git rebase -i master

哪个 AFAICS 应该给我一个 master 上的提交列表以及合并或不合并它们的选项,但是它说 noop,并且快进 newMaster 等于 master。

做我需要的最简单的方法是什么?

4

3 回答 3

32

做你想做的最简单的方法是留在(或重新签出)你想要编辑的分支并运行类似的东西。

git rebase --onto <sha1-of-bad-commit>^ <sha1-of-bad-commit>

这会将自错误提交以来的所有内容重新定位到错误提交的父级,从而有效地从当前分支的历史记录中删除错误提交。当然,如果发生冲突,您将需要解决它们。

于 2009-12-28T14:49:36.770 回答
18

git rebase -i是正确的命令,但您想从具有最新更改的分支执行此操作,并传入作为变基操作的“基础”的修订(错误提交之前的修订)。因此,如果您创建了一个last-good-commit指向最后一次良好提交的分支,您可能希望在 on 时运行以下命令master

git rebase -i last-good-commit
于 2009-12-28T14:51:02.740 回答
5

使用rebase,我无法将更改推送到遥控器,并且每次拉取时都取消了我的 rebase。

我成功地恢复了一个精确的提交(不是最后一个),简单地说:

git revert <sha-of-bad-commit>

然后我也能按遥控器

于 2012-12-17T16:55:13.270 回答