git中与hg rollback相对应的命令是什么?

23

如何在不删除更改的情况下“回滚”git中的最后一次提交?

这是我经常在hg中做的事情:

  • 提交“已修复107。”
  • 记得我忘记做了 某件事情
  • hg rollback
  • 某件事情
  • 提交“已修复107。”
4个回答

22

试试这个:

git reset --soft HEAD^

我发现这与 'hg 回滚' 相同,因为:

  • 最后一次提交被取消
  • 更改被保留
  • 之前提交的文件已暂存

您还可以像这样创建一个名为 rollback 的 git 别名:

git config --global alias.rollback 'reset --soft HEAD^'

所以现在你只需要键入 git rollback 就能得到与Mercurial上完全相同的命令。


20

如果你使用git,那么在这种情况下,你可能更喜欢使用--amend选项。

  • 提交“Fixed 107。”
  • 想起来忘了做某事
  • 做某事
  • git commit --amend并编辑注释

如果您需要回滚其他原因,请查看git revert


7
“还原”是处理多种原因之一的方法。如果相关提交已经发布,那么确实可以使用 git revert。如果它尚未被推送,并且它是最近的提交,请使用 git reset [--hard] HEAD^。如果它尚未被推送,并且它不是最近的提交,请使用 git rebase -i 将其从历史记录中删除,让其余内容保持不变。 - Cascabel
3
小心像我这样的 Git 新手。我执行了 "git reset HEAD^" 命令,结果不仅将我的提交从历史记录中删除,而且还将已提交的文件恢复到它们之前的提交状态。 - Davi Lima
@DaviLima git reset HEAD^ 不应该这样做,如果你同时使用 --hard 标志,它只会修改你工作目录中的文件。 - dubiousjim

3
在这种情况下,我会使用git commit --amend。如果您尚未推送并且已经提交了其他更改,则还可以使用git rebase -i编辑您想要的任何提交。

1
我正在尝试在我的git代码库中进行hg回滚,我成功地使用了。
git reset HEAD~

这让我在工作目录中保留了更改,但现在还没有提交。源代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接