首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Git Revert,Checkout和Reset有什么区别?

Git Revert,Checkout和Reset有什么区别?
EN

Stack Overflow用户
提问于 2011-12-02 21:37:49
回答 3查看 137K关注 0票数 331

我正在尝试学习如何将文件和项目恢复或回滚到以前的状态,而不了解git revertcheckoutreset之间的区别。为什么有3个不同的命令似乎有相同的目的,什么时候应该选择一个而不是另一个?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-02 22:43:34

这三个命令的目的完全不同。它们甚至一点也不相似。

git revert

此命令创建一个新的commit,该commit撤消对先前commit所做的更改。此命令将新的历史记录添加到项目中(它不修改现有的历史记录)。

git checkout

此命令从存储库中签出内容,并将其放入工作树中。它还可以有其他效果,具体取决于命令的调用方式。例如,它还可以更改您当前正在处理的分支。此命令不会对历史记录进行任何更改。

git reset

这个命令有点复杂。它实际上做了几件不同的事情,这取决于它是如何调用的。它修改索引(所谓的“临时区域”)。或者它改变了一个分支头当前指向的提交。此命令可能会更改现有的历史记录(通过更改分支引用的提交)。

使用这些命令

如果在项目历史中的某个地方进行了提交,而您后来确定该提交是错误的,并且不应该进行提交,那么git revert就是该工作的工具。它将撤消由错误提交引入的更改,并在历史记录中记录“撤消”。

如果您已经修改了工作树中的文件,但尚未提交更改,那么您可以使用git checkout签出该文件的一个新的存储库副本。

如果您已经提交了一个提交,但没有与其他任何人共享它,并且您决定不想要它,那么您可以使用git reset重写历史,这样看起来就像您从未提交过它一样。

这些只是一些可能的使用场景。在某些情况下,还可以使用其他命令,上述三个命令也有其他用途。

票数 533
EN

Stack Overflow用户

发布于 2017-07-16 00:03:08

假设你有提交:

代码语言:javascript
复制
C
B
A

git revert B将创建一个撤消B中更改的提交。

git revert A,将创建一个撤消A中更改的提交,但不会触及B中的更改

请注意,如果B中的更改依赖于A中的更改,则无法恢复A

git reset --soft A将更改提交历史记录和存储库;暂存和工作目录仍将处于C状态。

git reset --mixed A将更改提交历史记录、存储库和暂存;工作目录仍将处于C状态。

git reset --hard A将更改提交历史记录、存储库、暂存和工作目录;您将完全返回到A的状态。

票数 80
EN

Stack Overflow用户

发布于 2011-12-02 22:16:53

如果你破坏了树但是没有提交代码,你可以使用git reset,如果你只想恢复一个文件,你可以使用git checkout

如果您破坏了树并提交了代码,则可以使用git revert HEAD

http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8358035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档