git的撤销操作:reset、checkout和revert 区别

本文详细介绍了git的撤销命令reset、checkout和revert的区别。reset和checkout能撤销commit或文件,而revert仅适用于commit。reset可撤销未提交的本地修改,分为软、混合和硬三种模式,影响HEAD、index和workspace。checkout主要用于切换分支或恢复文件到特定版本。revert则是通过创建新commit来撤销已提交的修改,不改变历史记录。此外,还讨论了它们在文件级别的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

精讲链接:
https://segmentfault.com/a/1190000009126517

 

这三个命令都可以用于撤销。

reset和checkout可以作用于commit或者文件,revert只能作用于commit。
 

Index空间,也叫做stage空间,或者cache空间 

reset

$ git checkout hotfix
$ git reset HEAD~2

git reset 用于撤销未被提交到remote的改动,即撤销local的修改。
除了移动当前分支的HEAD,还可以更改workspace和index:

  • --soft:修改HEAD,不修改index和workspace。(只修改指针)

  • --mixed:修改HEAD和index,不修改workspace。默认行为。(修改指针、暂存区)

  • --hard:修改HEAD、index、workspace。(修改指针、暂存区、工作区)

git reset --mixed HEAD 把index的内容退回到workspace中。
git reset --hard HEAD 把index和workspace的修改全部撤销。

 

checkout

checkout作用于commit级别时,只是移动HEAD到不同的commit。如果有unstaged的文件,git会阻止操作并提示。如果使用commit id作为参数,可能会导致野指针。

 

revert

revert通过新建一个commit来撤销一次commit所做的修改,是一种安全的方式,并没有修改commit history。

区别:revert用于撤销committed changes,reset用于撤销uncommitted changes。

 

 

file级别的操作

reset

git reset <commit> <filename>只修改index去匹配某次commit。

git reset HEAD filename把文件从index退回workspace,并将更改保存在workspace中。

checkout

git checkout <commit> <filename>只修改workspace去匹配某次commit。

git checkout HEAD filename抹掉文件在workspace的修改。

总结

CommandScopeCommon use cases
git resetCommit-levelDiscard commits in a private branch or throw away uncommited changes
git resetFile-levelUnstage a file
git checkoutCommit-levelSwitch between branches or inspect old snapshots
git checkoutFile-levelDiscard changes in the working directory
git revertCommit-levelUndo commits in a public branch
git revertFile-level(N/A)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值