reset
一、git reset
git reset
是 Git
中一个非常重要且功能强大的命令,主要用于撤销更改和修改历史记录。它可以改变当前分支的提交历史。主要有以下几种作用:
- 重置暂存区(
staging area
):将暂存区的更改移除,使之与最新的提交一致。 - 重置工作目录(
working directory
):撤销工作目录中的更改,使之与指定的提交一致。 - 重置当前分支:将当前分支指针移至指定的提交对象。
特点:
-
更改项目的提交历史,可以删除一个或多个提交记录。
-
适用于重写提交历史的操作,但需要谨慎使用,特别是在多人的公共分支上。
-
可以改变当前分支的
HEAD
偏移,当进行hard reset
时,还会重置工作目录和暂存区的内容。
二、git reset HEAD^
git reset HEAD~
: git reset HEAD~
= git reset --mixed HEAD^
改变 HEAD
指针,同时重置暂存区,但不改变工作目录。
三、git reset --hard HEAD^
git reset --hard HEAD^
改变 HEAD
指针,同时重置暂存区和工作目录。将分支回退到指定提交,并且所有修改将被丢弃。
四、git reset --soft HEAD^
git reset --soft HEAD^
只改变 HEAD
指针,既不会更改暂存区也不会更改工作目录。会将你的当前分支回退到指定的提交(commit
),但保留工作目录修改和暂存区的内容。
应用场景: 如果 git add .
和 git commit -m "Commit Message"
之后, 发现想将这些改动回退到工作目录, 移除暂存区, 我们可以使用 git reset --sort HEAD^
。
五、git reset --mixed HEAD^
git reset --mixed HEAD^
: git reset HEAD~
= git reset --mixed HEAD^
, 改变 HEAD
指针,同时重置暂存区,但不改变工作目录。会将分支回退到指定的提交,并将这些更改保留在工作目录,但不会保留在暂存区。
六、git reset HEAD [file-name]
git reset HEAD [file-name]
如果你已经将一些文件添加到暂存区但不希望它们包含在下一个提交中,可以通过 git reset HEAD <file>
撤销暂存。
七、git reset --hard [commit id]
git reset --hard [commit id]
用指定版本的所有文件撤回到工作区
八、git reset [commit-id] [file-name]
git reset [commit-id] [file-name]
将指定commit-id
中的文件替换掉暂存区的文件
九、git reset --hard origin/<branch-name>
git reset --hard origin/<branch-name>
会将你的当前分支重置为和远程仓库中的对应分支完全一致。因此,你本地的所有未提交或已暂存的改动都会被丢弃。