zl程序教程

您现在的位置是:首页 >  其他

当前栏目

git reset 回退版本(版本穿梭)

2023-02-19 12:20:08 时间

1. 前言


git reset 命令用于回退到指定版本,是 git 的 “后悔药”

如果创建了一个新的文件,这个文件是未跟踪的状态,那么使用 reset 回退版本时,这个新文件不会受到影响

如果创建了一个新的文件,并且这个文件已被跟踪(已被提交到暂存区),那么使用 reset 回退版本时,这个新文件就会被删除

2. 回退类型


指针移动的时候,暂存区,工作区都不动。重置 git commit

git reset --soft [commit id]

指针移动的同时,重置暂存区,但是工作区不动。重置 git commit、git add

git reset --mixed [commit id]

指针移动的同时,重置暂存区和工作区。重置 git commit、git add 和工作副本的修改

git reset --hard [commit id]]

使用示例: 回退到指定版本

# 命令格式
git reset --hard <commit id>
# commit id 使用完整的值或前 7 位都可以
git reset --hard 75e24ff
git reset --hard 75e24ff4f6da07bfd300fc6b4249914b9958634c

3. 测试回退类型


先准备好一个用来测试的仓库,第一次提交只有一个 1.txt 文件,第二次提交新增一个 2.txt,以此类推,提交五次

修改 1.txt、2.txt,创建 6.txt、7.txt,将 2.txt、7.txt 提交到暂存区(当前处于最新的一次提交中)

vim 1.txt
vim 2.txt
touch 6.txt 7.txt
git add 2.txt 7.txt

--soft 参数只会重置 commit,不会重置 add 和工作区副本的修改

工作区: 修改了已被 git 跟踪的 1.txt,不会重置它的文件内容。6.txt 是新文件,它的状态也不会改变,还是未跟踪状态

暂存区: 暂存区中的 2.txt 修改状态和 7.txt 的新文件状态保留

版本库: 因为 3.txt、4.txt、5.txt 是之后当前版本才加入版本库的,git 重置 commit 后自动将它们放到了暂存区

--mixed 参数会重置 commit 和 add ,不会重置工作区副本的修改

其实就是在 --soft 参数的基础上,又重置了 add 操作

--hard 参数会重置 commit 和 add ,也会重置工作区副本的修改

其实就是在 --mixed 参数的基础上,又重置了文件的修改。在后面版本跟踪的文件,也会被删除,比如: 3.txt、4.txt、5.txt、7.txt

4. HEAD 的用法


回退到当前版本,下面两种用法等价 (放弃所有修改)

git reset --hard
git reset --hard HEAD

回退到上一个版本

git reset --hard HEAD^

回退到上上一个版本

git reset --hard HEAD^^

5. 回退远程库版本


本地库回退版本

git reset --hard <commit id>

-f, --force 将本地库版本强制推送到远程库(必须加 -f 参数)

git push -f origin <branch>