git - git revert, git checkout和git reset三者之间有什么不同?

标签 git git-checkout git-reset git-revert

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

最佳答案

这三个命令的用途完全不同。它们甚至都不遥不可及。
git revert
该命令将创建一个新的提交,以撤消对先前提交的更改。此命令将新历史记录添加到项目中(它不会修改现有历史记录)。
git checkout
此命令从存储库中 checkout 内容,并将其放入您的工作树中。它也可能具有其他效果,具体取决于调用命令的方式。例如,它还可以更改您当前正在哪个分支。此命令不会对历史记录进行任何更改。
git reset
这个命令有点复杂。实际上,根据调用方式的不同,它可以做很多不同的事情。它修改索引(所谓的“暂存区”)。或者更改分支头当前指向的提交。此命令可能会更改现有历史记录(通过更改分支引用的提交)。

使用这些命令

如果在项目历史记录中的某个位置进行过提交,而您以后又认为该提交是错误的并且不应该进行,那么git revert是完成此工作的工具。它将撤消由错误提交引起的更改,并在历史记录中记录“撤消”。

如果您在工作树中修改了文件,但尚未提交更改,则可以使用git checkout checkout 文件的存储库副本。

如果您进行了提交,但尚未与其他任何人共享,并且您决定不希望这样做,则可以使用git reset重写历史记录,以便看起来好像从未进行过该提交。

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

关于git - git revert, git checkout和git reset三者之间有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8358035/

相关文章:

git checkout 版本,包括子模块

git - 取消提交的更改,但将新文件保留在索引中

git - 使用适用于 Windows 的 Git 凭据管理器保存 GIT 凭据 - 不工作

git - 推送到分离头上的主提交

git - 他们是恢复 `git checkout` 的方法吗?

eclipse - egit 替换单个文件 - git 索引中的 HEAD 修订与文件

git - BUG : unpack-trees. c:699: pos 必须指向这个目录的第一个条目

perl - 在 msysgit 中为 git-remote-mediawiki 使用完整的 perl 库

git - 推送到远程 Git 存储库时出错

git - Android Studio/Git/VCS 搁置