【Git】回滚旧提交版本且不影响最新提交版本

【Git】回滚旧提交版本且不影响最新提交版本

一、场景假设

远程仓库origin中有一个分支main,有4次提交记录:v1、v2、v3、v4。

二、需求

需要回滚旧提交版本,但不影响已有的所有提交版本(即不影响最新提交版本),以便需要时可以重新回滚到最新提交版本。

如:现在想要回到版本v3,在v3上更新。之后可能回滚到最新版本v4。

三、基本思路

1、基于想要回滚的版本的commit号,创建【新分支】

(1)找到需要回滚的版本的commit号。

  • 方法一:使用git log查找。

    下图所示为v3的提交日志,commit后面的一长串字符即为commit号。

    在这里插入图片描述

  • 方法二(github仓库):在github仓库的commit历史中查找。

    点击下图所示的commits按钮,即可看到该分支下所有历史提交记录。
    在这里插入图片描述
    如下图所示,每条历史提交记录的右侧有一个复制按钮,点击即可复制该提交记录的commit号。
    在这里插入图片描述

(2)基于commit号在本地创建新分支。

使用如下命令:

git branch <new_branch_name> <commit_number>

假设创建新分支的名字是dev,回滚到v3,那么使用的命令就是:git branch dev f10c246f23c90c813813bc989e9feb2e4523ec9(这一长串就是前面找到的v3的commit号)。

注意:

git branch <new_branch_name>

这个命令只在本地创建分支,远程仓库(比如github)上面还不会显示有dev这个分支。

(3)将本地创建的此新分支推送到远程仓库

将本地创建的新分支推送到远程仓库后,远程仓库才会显示此新分支。使用如下命令:

git push <remote> <new_branch_name>

假设需要将新分支dev推送到远程仓库originorigin一般是远程仓库的别名),那么使用的命令就是:git push origin dev

2、切换到【新分支】,如后续有更新,所做的更新都推送到【该分支】

(1)切换到新分支

切换分支默认是切换到该分支的最新版本,即在前面的示例中,切换到分支dev即相当于回滚到了v3版本。

因为前面只是创建了分支,但是并没有跟踪该分支,因此要想在该分支上更新,还需要切换到该分支。

使用如下命令:

git checkout <target_branch_name>

假设要回滚到v3、在v3基础上进行更新,那就切换到以v3为最新版本的分支dev,即使用命令:git checkout dev

(2)如后续有更新,将更新推送到该分支

git add .
git commit -m '<your comment>' 
git push <remote> <target_branch_name> 

第一行命令表示将所有更新过的文件加入到暂存区,以便后续提交;

第二行命令的是对更新内容的备注;

第三行命令的具体示例:按照前面的案例,为git push origin dev

3、当需要回到先前的最新版本时,切换回【拥有该最新版本的分支】,如后续基于最新版本有更新,所做的更新都推送到【该分支】

(1)切换到拥有最新版本的分支

默认切换到该分支的最新commit版本。

git checkout <target_branch_name>

按照前面的案例,为git checkout main

(2)如后续有更新,将更新推送到分支

git add .
git commit -m '<your comment>'
git push <remote> <target_branch_name>

第一行命令表示将所有更新过的文件加入到暂存区,以便后续提交;

第二行命令的是对更新内容的备注;

第三行命令的具体示例:按照前面的案例,为git push origin main

其他情况

假设切换到分支中的非最新版本号,切换版本后会提示“您正处于分离头指针状态”。如果在这非最新版本上进行修改后,直接进行以下命令并不会将更新提交到dev。

git add .
git commit -m '<your comment>' 执行此命令后会看到有此更新的版本号,如:[分离头指针 560e268] revise v2.
git push <your remote> <your branch> 如:git push origin dev

但是更新的内容会有一个版本号。若想保留更新,可以基于此修改新建一个分支。使用命令与步骤1中的相似。具体而言,假设更新内容的版本号是560e268,可以创建新的分支dev2来保存这个版本的修改。即:git branch dev2 560e268。此时本地就会有dev2分支。要想将此本地分支推送到远程还需要进一步执行git push origin dev2

push操作可能会有一些网络问题导致不成功,多试几次就好。

四、一些基本命令

  • 查看本地有哪些分支

    git branch
    
  • 查看远程仓库有哪些分支

    git branch -r
    
  • 在本地新建分支(此时远程还没有)

    git branch <new_branch_name>
    

    如:git branch dev

  • 将在本地新建的分支推送到远程

    git push origin <new_branch_name>
    

    如:git push origin dev

  • 切换分支

    git checkout <branch_name>
    

    注:git checkout主要用于切换历史版本、切换分支。

    如:git checkout dev

    一般默认是切换到分支中的最新提交版本。

  • 在本地基于某版本创建分支并切换到该分支

    git checkout -b <new_branch_name> <commit_number>
    

    相当于合并了:git branch <new_branch_name>git checkout <new_branch_name>

  • 切换版本号

    git checkout <commit_number>
    

    这里应该是本分支下的版本号才可以进行切换。

  • 删除本地分支

    git branch -d <branch_name>
    

    注意:删除的分支不能是当前所处的分支。

  • 删除远程分支

    删除远程分支之前要先删除本地分支。

    git push origin --delete <branch_name>
    
    这里应该是本分支下的版本号才可以进行切换。
    
  • 删除本地分支

    git branch -d <branch_name>
    

    注意:删除的分支不能是当前所处的分支。

  • 删除远程分支

    删除远程分支之前要先删除本地分支。

    git push origin --delete <branch_name>
    
  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值