GIT撤消不是最新的提交,自那以后重新提交所有提交

时间:2009-12-28 14:36:42

标签: git git-rebase

早些时候,我提交了一些当时似乎是个好主意的代码,但事实上它使事情变得更糟。我想从历史记录中删除更改,因为它没有帮助,并且自那以后重新提交所有提交 - 它们应该合并而没有问题。

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

git rebase -i master

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

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

3 个答案:

答案 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>

然后我也能够推动远程