git restore .
和git restore --staged .
的区别:
命令 | 工作区内容 | 缓存区内容 |
---|---|---|
git restore . 或 git checkout . | 被修改,恢复到缓存区的版本 | 不操作,已有内容不变 |
git restore --staged . | 不操作,最新修改不变 | 清空,不再跟踪修改 |
注:. 代表所有文件,可指定具体文件 |
区别:
从表中可以看出,git restore .
的影响会更大:
如果正在修改代码,还没再次添加到缓存区,会先读取缓存区里的文件,然后直接覆盖(工作区)正在修改的文件。
而git restore --staged .
只是撤销上一次添加到缓冲区的版本记录而已,不会修改任何文件。
使用场景:
git restore .
:可以用来撤销相对缓存区版本之后的,对工作区文件的修改。git restore --staged .
:可以用来取消上一次添加到缓存区版本的记录,然后执行git add .
,把工作区最新的修改记录到缓存区。避免缓存区记录太多无用版本。PS:vscode里 取消暂存更改 就是这个命令
# 查看缓冲区状态
git status
# 添加修改到缓存区
git add .
# 将缓存区的内容,覆盖本地还没添加到缓存区的修改,缓存区的内容不变
# 即撤销所有未缓存的修改,代码恢复到缓存区的版本
git checkout .
# 等价于
git restore .
# 不再跟踪缓存区的文件,不会覆盖最近的修改
# 只是撤销添加到缓冲区的记录,与工作区的内容没关系
git restore --staged .