我怎样才能回滚 1 次提交?

我怎样才能回滚 1 次提交?

我有 2 个提交没有推送:

$ git status
# On branch master
# Your branch is ahead of 'faves/master' by 2 commits.

我怎样才能回滚我的第一个(最旧的一个),但保留第二个?

 $ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...

commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

从这里:

http://friendfeed.com/harijay/742631ff/git-question-how-do-i-rollback-commit-just-want

我只需要做:

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

那是?

答案1

最安全且最干净的方式是以交互方式进行重新定基。

git rebase -i HEAD^^

或者,

git rebase -i baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e^

从那里,您可以压缩提交,将一个或多个提交合并到上一个提交中。要从历史记录中完全删除提交,请从列表中删除该行。

您可以使用 恢复提交,git revert但这会在历史记录中添加更多提交消息,这可能是不理想的。使用参数-n告诉 Git 不要立即提交恢复。您可以以交互方式重新设置基准,并将这些消息压缩到上一次提交以保持干净。

如果您在此处处理的两个提交影响同一个文件,则可能会看到合并冲突。

重置存储库时应git reset --hard小心谨慎,因为它无法撤消。

改写历史应当谨慎。

答案2

如果来自http://nakkaya.com/2009/09/24/git-delete-last-commit/ 它对我有用

Git 删除最后一次提交

有时候深夜喝完咖啡后,我会提交一些不该提交的东西。然后我会花 10-15 分钟在谷歌上搜索如何删除我最后一次提交的内容。所以第三次之后,我想记录下来,以便以后参考。

如果你犯了垃圾行为但没有推动,

git reset --hard HEAD~1

HEAD~1 是 head 之前的提交的简写。或者,您可以引用要重置的哈希的 SHA-1。请注意,使用 --hard 时,自 head 之前的提交以来对工作树中跟踪文件的任何更改都将丢失。

如果您不想抹去已完成的工作,您可以使用 --soft删除提交的选项,但它会保留所有更改的文件“待提交的更改”,正如 git status 所说的那样。

现在,如果你已经推送了,有人拉取了(我的情况通常如此),你就不能使用 git reset。不过你可以使用 git revert,

git revert HEAD

这将创建一个新的提交,并撤销意外提交所引入的所有内容。

答案3

不会。git-reset --hard 会将您带回到历史记录。您要找的是 git revert,它将撤消任何提交。

答案4

否,git reset --hard baf8d5e将删除3368e1c提交并且 HEAD 将位于baf8d5e之后。

如果您想保留3368e1c提交并删除bad8d5e提交,最简单的解决方案是执行“ git rebase -i HEAD~2”(即最后两次提交的交互式变基)。此命令将启动您的提交消息编辑器,您将看到最后两次提交各一行。您只需删除bad8d5e提交行并保存即可。然后 git 将重写您的历史记录,第二次提交将消失。

您还可以在提交消息编辑器中使用其他有用的命令,例如squashedit等。交互式变基非常强大!

如果有人已经看到这些提交(从您的存储库推送或拉取)请不要这样做!

相关内容