【Git】git 分支或指定文件回退到指定版本

目录

一、分支回滚

1. 使用 git reset 命令

2.使用 git revert 命令 

 3.使用 git checkout 命令

 二、某个文件回滚

1.查看哪些文件发生修改

2.然后查看提交记录(最近几次提交)

3.执行提交命令


一、分支回滚

1. 使用 git reset 命令

命令可以将当前分支的 HEAD 指针指向指定的提交,从而回退代码到指定版本。
该命令有三种模式:–soft、–mixed 和 --hard。它们的区别在于回退代码的程度不同。

  • --mixed (默认):将 HEAD 指针和暂存区都回退到指定提交,但不改变工作区的内容。
  • --soft 仅将 HEAD 指针回退到指定提交,不改变暂存区和工作区的内容。
  • --hard 将 HEAD 指针、暂存区和工作区都回退到指定提交,会丢失最新的代码修改,慎用。
# 查看提交历史
git log 

# 回退到指定提交(使用 --soft 模式)
git reset --soft 

# 查看状态,确认回退操作是否正确
git status

# 提交回退后的代码
git commit -m "回退到 "

# 将修改的代码推送到远程仓库
git push origin 

2.使用 git revert 命令 

git revert 命令可以将指定提交的修改反向应用到当前分支上,相当于撤销指定提交的修改
这种方式比使用 git reset 命令更加安全,因为它不会改变提交历史,而是创建一个新的提交来撤销之前的修改。

# 查看提交历史
git log

# 撤销指定提交,这样会创建一个新的提交来撤销之前的修改
git revert 

# 提交撤销操作
git commit -m "回退到版本 "

# 推送到远程仓库
git push origin 

 3.使用 git checkout 命令

git checkout 命令可以将当前分支的 HEAD 指针指向指定的提交,并将工作区的内容替换成指定提交的内容。这种方式不改变提交历史,但会直接覆盖工作区的内容,慎用

# 查看提交历史
git log

# 切换到指定提交
git checkout 

# 提交回退后的代码
git commit -m "回退到版本 "

# 切回到原来的分支
git checkout 

# 推送当前分支到远程仓库
git push origin 
# 表示当前分支的名称,例如 master。这个命令会将本地分支的提交推送到远程仓库,并将远程分支更新为与本地分支一致。

 二、某个文件回滚

如果某次改动比较大,牵涉到的文件比较多。但是某个文件本来是没问题的,结果画蛇添足,改出问题来了,这时候直接回退版本会把所有代码都回退掉,可能得不偿失。这时候就需要指定回退单个文件到为修改之前的版本。

1.查看哪些文件发生修改

首先先获取需要回退的文件路径,比较简单的方法就是,在该文件加个细微改动,比如一条无关注释,然后通过git status  可以看到当前分支下修改的文件信息

git status 

查看文件内容变化

git diff commitId1  commitId2
或
git diff commitid  本地文件

2.然后查看提交记录(最近几次提交)

git log -2

commit 3f290fa303e1aceea63e215a7ec68a5381eb8034 (HEAD -> main, origin/main)
Author: ning
Date:   Thu Sep 21 16:39:35 2023 +0800

    test buffer

commit 9bec77097394b5dcba39d79da7c6ea7ed73474f1
Author: ning
Date:   Thu Sep 21 16:36:26 2023 +0800

    test buffer

这里有两个参数需要记录下来

  •  需要回退的文件路径:/source/code/test.java (git status 命令可以看到)
  •  需要回退到哪的 commit ID:3f290fa303e1aceea63e215a7ec68a5381eb8034

3.执行提交命令

  • 执行 git checkout commitID 回滚文件路径
➜  git:(test) git checkout 3f290fa303e1aceea63e215a7ec68a5381eb8034 /source/code/test.java 
Updated 1 path from 3f290fa30

此时代码就会还原到登录功能大改之前,如果不需要做啥修改,直接可以commit。

你可能感兴趣的:(持续集成与发布(CI/CD),git)