关于git:rebase vs reset vs revert?


rebase vs reset vs revert? I just want to roll back

本问题已经有最佳答案,请猛点这里访问。

假设我做了很多提交,我们称它们为1、2、3、4、5和6(哈希)。

假设我和hash 6一起提交。我所要做的就是返回到hash 3,使之成为我的代码库的状态与我提交hash 3时的状态相同,就好像另一个提交从未发生过一样。

当我看到这样的答案时,似乎每个人都有不同的答案。resetrevertrebase?我甚至不知道这三个词在英语中的区别。

我只想在以前的承诺。有人能告诉我怎么做吗?


如果你已经把你的分支推到某个地方,或者有人从你身上拉了下来,你唯一的选择就是git revert $COMMIT...

这将创建一个取消您在commit(s)$COMMIT...中所做的任何操作的commit。

例如,要恢复最后三次提交:

1
git revert HEAD~2..HEAD

如果您将您的承诺完全保留在本地和私人,那么您可以简单地执行1(2)。

这将把您的分支指针移动到$COMMIT,这样分支就不再包含以下提交。

根据索引和工作树的状态,您可能需要任何选项git reset --soft $COMMITgit reset --hard $COMMIT

例如,要将分支重置为最后三个之前的提交:

1
git reset HEAD~3

git rebase听起来不像你想要的。

当您想从一个提交中复制或"移动"一些提交时,可以使用它,这些提交是基于另一个提交(另一个基础),因此是"重新平衡"。


这样怎么样:

  • 为哈希3创建分支。

  • 创建pr或将此分支合并到master(哈希6)