什么是git中的svn还原等价物?

时间:2014-02-11 04:42:46

标签: git svn

我试图在Git中找到相当于svn Revert的内容。在svn中,当我严格点击某个文件,然后点击revert,这将撤消所有本地修改。该文件返回到最后一个commit。我在Git中找不到完全相同的命令。因为我是新人,所以我不想弄乱我的工作。

假设我提交了 Init 。然后我做了一些改变。现在我想回到 Init 状态。

感谢您的帮助

3 个答案:

答案 0 :(得分:14)

由于暂存区域,它不像svn revert那么简单。根据您的工作以及目标,您需要使用git checkoutgit reset。你需要小心git reset,因为你可以重写历史并失去工作。

假设你有提交图:

A <-- B <-- C <-- D

目前您正在D进行一些更改。要简单地放弃所有更改(暂停或不暂停),您可以使用git reset --hard HEADgit reset --hard D。两者都将重置工作副本的状态。

如果您希望工作副本的状态与A相同,但不会丢失提交BC,那么您应该使用:git checkout A -- .来自工作副本的顶部。这会将您的工作副本的状态设置为A的内容。此时,您的工作树很脏,因此您需要承诺记录您想要返回的事实。此时的提交图将是:

A <-- B <-- C <-- D <-- A'

其中A'是一个新的提交(具有不同的ID),使您的工作恢复到等同于提交A

如果您想丢失提交BC,可以使用git reset --hard A。这会将分支指针移回提交A。你现在正在重写历史,所以要小心。如果您在此分支上与其他团队成员合作,则不希望这样做。如果它是您自己的分支,则可能需要使用git push -f-f代表--force,将其推送到您的远程仓库。您还需要确保将push.default设置为currentupstream,以避免推送所有匹配的分支并意外地重绕某人的工作。

几个月前,我写了blog post about reverting changes in Git。它今天仍然有用。您可能会发现它很有用。

答案 1 :(得分:10)

只要文件没有暂存,我通常会使用

git checkout -- .

您也可以使用

git checkout HEAD -- path/to/some/file.txt

HEAD或任何其他提交签出单个文件

答案 2 :(得分:1)

git reset --hard Init

HEAD恢复为Init。您可能希望先创建一个分支或标记,以保存您已完成的任何其他工作。