为了账号安全,请及时绑定邮箱和手机立即绑定

Git还原,检出和重置之间有什么区别?

Git还原,检出和重置之间有什么区别?

Git
桃花长相依 2019-12-07 14:22:14
我想学习如何回滚文件和项目或恢复到以前的状态,不明白之间的差别git revert,checkout和reset。为什么有3个不同的命令看似相同的目的,以及何时应该选择一个而不是另一个?
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

这三个命令的用途完全不同。它们甚至都不遥不可及。

git revert

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

git checkout

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

git reset

这个命令有点复杂。实际上,根据调用方式的不同,它会做很多不同的事情。它修改索引(所谓的“暂存区”)。或者更改分支头当前指向的提交。此命令可能会更改现有历史记录(通过更改分支引用的提交)。

使用这些命令

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

如果您已经在工作树中修改了文件,但是尚未提交更改,则可以git checkout用来检出文件的从存储库复制的副本。

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

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


查看完整回答
反对 回复 2019-12-07
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

假设您有提交:


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完全的状态。


查看完整回答
反对 回复 2019-12-07
?
长风秋雁

TA贡献1757条经验 获得超7个赞

  • git revert用于撤消先前的提交。在git中,您无法更改或删除较早的提交。(实际上,您可以,但是可能会导致问题。)因此,revert不会编辑较早的提交,而是引入了一个新的提交,该提交会撤销较早的提交。

  • git reset 用于撤消工作目录中尚未提交的更改。

  • git checkout用于将文件从其他提交复制到当前工作树。它不会自动提交文件。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 1742 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信