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

Ric*_*d77 15 svn git

我试图svn Revert在Git中找到相同的东西.在svn,当我严格单击文件然后单击revert时,将撤消所有本地编辑.该文件回到最后commit.我在Git中找不到完全相同的命令.因为我是新人,所以我不想弄乱我的工作.

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

谢谢你的帮助

Joh*_*ter 15

由于临时区域,它不像一个简单的区域svn revert.根据您的工作和目标,您需要使用git checkoutgit reset.但是你需要小心git reset,因为你可以重写历史并失去工作.

假设你有提交图:

A <-- B <-- C <-- D
Run Code Online (Sandbox Code Playgroud)

而你目前正处于D一些变化之中.要简单地丢弃所有更改(分阶段或不分阶段),您可以使用git reset --hard HEADgit reset --hard D.两者都将重置工作副本的状态.

如果你希望你的工作拷贝的状态是相同的A,但不能失去的提交BC,那么你应该使用:git checkout A -- .从你的工作拷贝上.这将把你的工作副本的状态设置为A.此时,您的工作树很脏,因此您需要承诺记录您想要返回的事实.此时的提交图将是:

A <-- B <-- C <-- D <-- A'
Run Code Online (Sandbox Code Playgroud)

哪个A'是新的提交(具有不同的id),使您的工作恢复到相当于提交A.

如果你不想失去犯BC,你可以使用git reset --hard A.这会将您的分支指针移回提交A.你现在正在重写历史,所以要小心.如果您在此分支上与其他团队成员合作,则不希望这样做.如果这是你自己的分支,您可能需要使用git push -f,其中的-f代表--force,它推到远程回购时.您还需要确保你已经设置push.default要么currentupstream避免推动所有匹配的树枝时,不慎复卷别人的工作.

FWIW,几年前我写了一篇关于恢复Git变化博客文章.它今天仍然有用.你可能会发现它很有用.


Dan*_*iel 11

只要文件没有上传,我通常会使用

git checkout -- .
Run Code Online (Sandbox Code Playgroud)

你也可以使用

git checkout HEAD -- path/to/some/file.txt
Run Code Online (Sandbox Code Playgroud)

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