在使用Git中,我们经常需要撤消更改,本文件详细讲解撤消文件更改的几种方式
目录
内容
在Git中,有以下几种方案可以实现 丢弃文件变更(即:撤消文件更改):
- restore 命令(推荐)
- checkout 命令
- reset 命令
各个方案的详细原理和使用方式如下:
1. restore
restore 命令主要用于恢复 工作区 和 暂存区 中的文件变更;所以,它是专为丢弃文件变更而设计的命令;
使用方式如下:
语法:
git restore [-S | --staged] [-W | --worktree] [-s <tree> | -source=<tree>] 文件……
-
-S | --staged
:恢复暂存区中的文件 -
-W | --worktree
: 恢复工作区中的文件;该选项是默认选项,即,若未指定--staged
或--worktree
,则,默认使用--worktree
-
-s <tree> | -source=<tree>
:指定恢复到哪个提交状态,如果未指定,则默认为HEAD
示例:
# 将暂存区 和 工作区中的 文件1.txt 都恢复
git restore -SW 文件1.txt
# 将所有的 `.c` 文件在工作区的中更改还原到 branch1 分支的状态
git restore '*.c' -s branch1
2. checkout
checkout 命令主要作用是用来签出指定分支的;但也可以用来签出指定的文件,我们可以利用这个特性来实现丢弃文件变更;
将指定的文件签出到指定提交的版本;
语法:
git checkout [提交] [--] 文件……
-
提交
: 指定将文件签出到指定提交的状态,并会取消对该文件的暂存;如果没指定,则会将文件签出到暂存区中的状态,但不会取消对该文件的暂存;
示例:
# 将 工作区 中 文件1.txt 和 文件2.txt 的更改恢复到 当前暂存区中的状态
git checkout 文件1.txt 文件2.txt
# 撤消 文件1.txt 和 文件2.txt 的变更,并取消暂存 文件1.txt 和 文件2.txt
git checkout HEAD -- 文件1.txt 文件2.txt
3. reset
reset 命令的作用是将 HEAD 重置某个提交,它操作的目标是提交历史;但该命令有个特性是可以将重置的变更(即重置后丢弃的变更)放在 暂存区 或 工作区中,也可以完会丢弃 并 重置暂时区 或 工作区;利用这个特性,我们可以实现丢弃文件变更的效果;
3.1. 思路
将当前 HEAD 重置到当前 HEAD,即不改变 HEAD 的位置,根据需要选择将 暂存区 或 工作区 重置到 HEAD 的状态;
3.2. 方案
-
git reset --hard HEAD
:将 工作区 和 暂存区 都重置到 HEAD 状态;即,撤消 工作区 和 暂存区 中所有的更改 -
git reset HEAD 文件...
|git reset --mixed HEAD 文件...
:仅将 暂存区 中指定的文件重置到 HEAD 状态;即,取消对指定文件的暂存 -
git reset HEAD
|git reset --mixed HEAD
:仅将 暂存区 重置到 HEAD 状态;即,把所有暂存的文件都取消暂存
示例:
# 取消暂存 文件1.txt 文件2.txt
git reset HEAD 文件1.txt 文件2.txt
# 把所有暂存的文件都取消暂存
git reset HEAD
网友评论