此问题已在此处有答案:
How do I revert a Git repository to a previous commit?(41答案)
8年前关闭。
我不太清楚git revert
是如何工作的。例如,我想恢复到头部后面六个提交的提交,恢复中间提交中的所有更改。
假设它的SHA哈希是56e05fced214c44a37759efa2dfc25a65d8ae98d
。那我为什么不能做点什么
git revert 56e05fced214c44a37759efa2dfc25a65d8ae98d
9条答案
按热度按时间fruv7luv1#
如果你想在当前HEAD的顶部提交,并在另一次提交时使用相同的状态,撤销所有的中间提交,那么你可以使用
reset
来创建正确的索引状态来进行提交。vyswwuz22#
git-revert所做的是创建一个提交,该提交撤销给定提交中所做的更改,创建一个与给定提交相反的提交。因此
它应该和工作。
如果你想回退到指定的提交,并且你可以这样做,因为这部分历史记录还没有发布,你需要使用git-reset,而不是git-revert:
(Note
--hard
会让你丢失工作目录中任何未提交的更改)。附加说明
顺便说一句,也许这不是显而易见的,但在文档中提到
<commit>
或<commit-ish>
(或<object>
)的任何地方,您都可以放置提交的SHA-1标识符(完整或缩短)。q1qsirdb3#
它恢复所述的提交,也就是说,添加与之相反的提交。如果要检出较早的修订版,请执行以下操作:
pkbketx94#
回滚到特定提交的最佳方法是:
然后:
jmp7cifd5#
如果你的修改已经被推送到一个public,sharedremote,并且你想恢复
HEAD
和<sha-id>
之间的所有提交,那么你可以传递一个提交范围给git revert
,并且它将恢复
56e05f
和HEAD
之间的所有提交(不包括范围的起始点56e05f
)。bkkx9g8r6#
更新时间:
如果中间没有合并提交,这个答案提供了一个更简单的方法:https://stackoverflow.com/a/21718540/541862
但是如果有一个或多个合并提交,这个答案就不起作用了,所以坚持这个(在所有情况下都起作用)。
原始答案:
这两个命令
git reset --hard
和git reset --soft
在这里很神奇。第一个修改了工作目录,但也修改了head(当前分支)。我们用第二个来固定头部。vm0i2vca7#
这更容易理解:
为了证明它有效:
r6hnlfcb8#
应该是这样简单:
它会让你回到那个特定的时间点。
ecr0jaav9#
这可能会起作用: