我试图svn Revert
在Git中找到相同的东西.在svn
,当我严格单击文件然后单击revert
时,将撤消所有本地编辑.该文件回到最后commit
.我在Git中找不到完全相同的命令.因为我是新人,所以我不想弄乱我的工作.
假设我做了一个提交Init.然后我做了一些改变.现在我想回到Init状态.
谢谢你的帮助
Joh*_*ter 15
由于临时区域,它不像一个简单的区域svn revert
.根据您的工作和目标,您需要使用git checkout
或git reset
.但是你需要小心git reset
,因为你可以重写历史并失去工作.
假设你有提交图:
A <-- B <-- C <-- D
Run Code Online (Sandbox Code Playgroud)
而你目前正处于D
一些变化之中.要简单地丢弃所有更改(分阶段或不分阶段),您可以使用git reset --hard HEAD
或git reset --hard D
.两者都将重置工作副本的状态.
如果你希望你的工作拷贝的状态是相同的A
,但不能失去的提交B
和C
,那么你应该使用:git checkout A -- .
从你的工作拷贝上.这将把你的工作副本的状态设置为A
.此时,您的工作树很脏,因此您需要承诺记录您想要返回的事实.此时的提交图将是:
A <-- B <-- C <-- D <-- A'
Run Code Online (Sandbox Code Playgroud)
哪个A'
是新的提交(具有不同的id),使您的工作恢复到相当于提交A
.
如果你不想失去犯B
和C
,你可以使用git reset --hard A
.这会将您的分支指针移回提交A
.你现在正在重写历史,所以要小心.如果您在此分支上与其他团队成员合作,则不希望这样做.如果这是你自己的分支,您可能需要使用git push -f
,其中的-f
代表--force
,它推到远程回购时.您还需要确保你已经设置push.default
要么current
或upstream
避免推动所有匹配的树枝时,不慎复卷别人的工作.
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
或任何其他提交