我试图在Git中找到相当于svn Revert
的内容。在svn
中,当我严格点击某个文件,然后点击revert
,这将撤消所有本地修改。该文件返回到最后一个commit
。我在Git中找不到完全相同的命令。因为我是新人,所以我不想弄乱我的工作。
假设我提交了 Init 。然后我做了一些改变。现在我想回到 Init 状态。
感谢您的帮助
答案 0 :(得分:14)
由于暂存区域,它不像svn revert
那么简单。根据您的工作以及目标,您需要使用git checkout
或git reset
。你需要小心git reset
,因为你可以重写历史并失去工作。
假设你有提交图:
A <-- B <-- C <-- D
目前您正在D
进行一些更改。要简单地放弃所有更改(暂停或不暂停),您可以使用git reset --hard HEAD
或git reset --hard D
。两者都将重置工作副本的状态。
如果您希望工作副本的状态与A
相同,但不会丢失提交B
和C
,那么您应该使用:git checkout A -- .
来自工作副本的顶部。这会将您的工作副本的状态设置为A
的内容。此时,您的工作树很脏,因此您需要承诺记录您想要返回的事实。此时的提交图将是:
A <-- B <-- C <-- D <-- A'
其中A'
是一个新的提交(具有不同的ID),使您的工作恢复到等同于提交A
。
如果您想丢失提交B
和C
,可以使用git reset --hard A
。这会将分支指针移回提交A
。你现在正在重写历史,所以要小心。如果您在此分支上与其他团队成员合作,则不希望这样做。如果它是您自己的分支,则可能需要使用git push -f
,-f
代表--force
,将其推送到您的远程仓库。您还需要确保将push.default
设置为current
或upstream
,以避免推送所有匹配的分支并意外地重绕某人的工作。
答案 1 :(得分:10)
只要文件没有暂存,我通常会使用
git checkout -- .
您也可以使用
git checkout HEAD -- path/to/some/file.txt
从HEAD
或任何其他提交签出单个文件
答案 2 :(得分:1)
git reset --hard Init
将HEAD
恢复为Init
。您可能希望先创建一个分支或标记,以保存您已完成的任何其他工作。