首页 > 其他分享 >Git进阶命令-reset

Git进阶命令-reset

时间:2024-03-13 23:44:53浏览次数:26  
标签:reset git 进阶 -- 代码 Git 提交 commit

之前有关Git,写过一片文章: Git五个常见问题及解决方法

一、reset命令使用场景

有时候我们提交了一些错误的或者不完善的代码,需要回退到之前的某个稳定的版本,面对这种情况有两种解决方法:

解决方法1:修改错误内容,再次commit一次

解决方法2:使用git reset 命令撤销这一次错误的commit

第一种方法比较直接,但会多一次commit记录,同时并不是所有场景都可以这么做。

所以建议使用第二种方法,因为错误的commit没必要保留下来。


二、reset命令

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

reset 命令的原理是根据 commitId 来恢复版本。

因为每次提交都会生成一个 commitId,所以说 reset 可以帮你恢复到历史的任何一个版本。

这里的版本和提交是一个意思,一个 commitId 就是一个版本

命令格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

常用命令

# 回退所有内容到上一个版本
git reset HEAD^

# 回退test.txt这个文件的版本到上一个版本
git reset HEAD^ test.txt

# 向前回退到第3个版本
git reset  HEAD~3

# 回退到某个版本51363e6
git reset 51363e6

注意:对于已经 push 的 commit,也可以使用reset命令,不过再次 push 时,由于远程分支和本地分支有差异,需要强制推送 git push -f 来覆盖被 reset 的 commit。

这里非常需要注意,因为 git push -f 是一个非常危险的命令。

如果在 git push -f 之前有其他同事 push 新代码。那么同事提交代码会丢失。

所以这里一定要注意 git push -f 之前要先 git pull 拉下是否有新提交代码。


三、reset参数有哪些?

option 参数的选项有以下几种

git reset --mixed:此为默认方式,将撤回的代码,存放到工作区。同时会保留本地未提交的内容。

git reset --soft:回退到某个版本 。将撤回的代码,存放到暂存区。同时会保留本地未提交的内容。

git reset --hard:彻底回退到某个版本,丢弃将撤回的代码,本地没有commit的修改会被全部擦掉。(慎用)

下面对这三种参数分别一一通过示例演示


四、reset --mixed

默认方式,将撤回的代码,存放到工作区。同时会保留本地未提交的内容。

在代码提交后,我发现这次提交也就是 commitId 为 7812249,提交错了,需要撤回。

同时这个时候呢,本地又新增修改了一些代码

执行命令

git reset d0eda46

注意 这里的commitId不是提交代码2的,而是提交代码1的,因为我们想的是回到是1这个版本,别搞错了

可以看出本地的代码和撤回的代码都在,且都在工作区

我们再来看下提交日志

git log --oneline

可以看到 提交代码2 的提交记录已经没有了。


五、reset --soft

soft和mixed差别并不大,无非就是一个回退到暂存区一个回退到工作区。

我们来演示下,把上面三个文件重新提交一次

$ git commit -a -m  '提交代码2'
[feature ebb89a1] 提交代码2
3 files changed, 5 insertions(+), 2 deletions(-)

然后再来执行reset命令

git reset --soft d0eda46

可以看出撤回的都返回在暂存区。


六、reset --hardt

这个命令和前面差别就非常大了,它不仅会丢弃错误commit提交的代码,而且本地没有commit的修改会被全部擦掉,关键是这种情况本地代码一旦擦掉是没有任何办法在找回来了。

同样我们把上面的代码再次提交

$ git commit -m  '提交代码3'
[feature de970f2] 提交代码3
3 files changed, 5 insertions(+), 2 deletions(-)

然后再来执行reset命令

git reset --hard d0eda46

在看本地

$ git status
On branch feature
nothing to commit, working tree clean

在工作区和暂存区已经没有任何代码了,也就是如果这个时候你本地开发的代码没有提交,那就永远也找不回来了。

那之前提交过的但又撤回的 提交代码3 的代码可以找回吗?

这个是可以的。

我们通过 git log --oneline 是找不回的。

找不到 提交代码3 的记录了。 那怎么办呢?

可以通过 git reflog 命令实现找回

执行命令

git reflog

这里能找到 commit 提交代码3 的记录。那现在要做的就是撤回到当前提交的位置。

执行命令

git reset de970f2

全部回来啦。

注意 切记!!!工作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了。



声明: 公众号如需转载该篇文章,发表文章的头部一定要 告知是转至公众号: 后端元宇宙。同时也可以问本人要markdown原稿和原图片。其它情况一律禁止转载!

标签:reset,git,进阶,--,代码,Git,提交,commit
From: https://www.cnblogs.com/qdhxhz/p/17926179.html

相关文章

  • git--协同开发
    目录1.本地常用命令2.云端部署1.本地常用命令gitinit  初始化仓库gitstatus  显示当前工作区是否有未提交代码gitadd+(文件名) 提交文件到暂存区gitcommit-m"提交说明"提交文件到本地仓库gitlog  显示当前分支上的日志记录gitreflog显示仓库......
  • Git
    关于git的一些介绍以及大部分用法,可以参考官方文档,本文只记录一些常用操作和一些比较难的操作。gitfetch和gitpull对比先用一张图来理一下gitfetch和gitpull的概念:gitfetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。gitfetchorig......
  • 操作符进阶
    补充操作符:1.加减乘除后赋值:+=,-=,=,/=直接上强度,四个操作符一起讲。#include<stdio.h>intmain(){ inta=10; a+=10;//和a=a+10一样 a-=5;//和a=a-10一样 a*=3;//和a=a*10一样 a/=5;//和a=a/10一样 printf("%d",a);}为了分析代码方便直接上注释了分析代码:a=10,操作......
  • 【Django进阶】djangorestframework-jwt使用
    【Django进阶】djangorestframework-jwt使用  简介Jsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者......
  • 代码随想录算法训练营第四十五天 | 279.完全平方数,322. 零钱兑换,70. 爬楼梯 (进阶)
    57.爬楼梯(第八期模拟笔试)时间限制:1.000S空间限制:128MB题目描述假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬至多m(1<=m<n)个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。输入描述输入共一行,包含两个正整数,分......
  • 数据结构进阶
    区间数颜色LOJ#3751.[SDOI2009]HH的项链给定长度为\(n\)的序列,\(m\)次询问\([l,r]\)内有多少不同的元素。\(n\le5\times10^4\),\(m\le2\times10^5\)。区间数颜色是莫队算法的经典应用,可以用莫队在\(\Theta(m\sqrtn)\)内解决。P1972[SDOI2009]HH的项链(数据加......
  • gitlab-ci 使用钉钉进行Job通知
    首先注册登录钉钉自行查询方法吧1、这里要提一下钉钉注册登录好之后在手机上是无法看到钉钉的webhook信息的,需要使用PC登录查看具体方法如下首先钉钉创建群聊,选择机器人  添加机器人 我这里添加了两个机器人gitlab 和自定义 先了解下gitlab机器人配置方法......
  • 代码随想录算法训练营第四十五天| ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全
    爬楼梯 (进阶)题目链接:57.爬楼梯(第八期模拟笔试)(kamacoder.com)思路:笑嘻了,直接给默写出来了。#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m;cin>>n>>m;vector<int>dp(n+1);dp[0]=1;for(inti=1;i<=n;i++){for(in......
  • Gitlab怎么删除仓库
    按以下步骤删除一个仓库选择项目进入设置设置-通用拖动到底部点击高级-展开点击删除项目输入项目名称确认删除......
  • Prompt进阶3:LangGPT(构建高性能质量Prompt策略和技巧2)--稳定高质量文案生成器
    Prompt进阶3:LangGPT(构建高性能质量Prompt策略和技巧2)--稳定高质量文案生成器1.LangGPT介绍现有Prompt创建方法有如下缺点:缺乏系统性:大多是细碎的规则,技巧,严重依赖个人经验缺乏灵活性:对他人分享的优质prompt进行调整需要直接修改prompt内容缺乏交互友好性:优质promp......