git常用命令及其错误的纠正

本文介绍了Git中如何处理代码回退与恢复的情况,包括未推送时的reset命令使用及已推送时的revert命令应用,并讲解了如何利用reflog解决误操作导致的数据丢失问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

回到上一次提交

这个问题,通常会有两种情况;先说第一种情况
需要一个git的常用命令:git log – 查看日志

1. 没有 push

这种情况发生在你的本地代码库中,我们只做了addcommit,但是发现代码有点问题,不能做提交;
那么我们将使用reset命令恢复:

git reset [--soft | --mixed | --hard] <commit_id>

我们使用reset命令常见有三种类型:

  • --mixed: 保留源码,只是将commitindex 信息回退到了某个版本,–mixed 是默认参数,可以省略不写
  • --soft:保留源码,只回退到commit信息到某个版本,不涉及index的回退,如果还是需要提交,直接commit即可.
  • --hard:不保留源码,commitindex都回回退到某个版本(注意:此种方法慎用,会把自己新写的代码丢弃

如果你push代码后,使用git reset --hard <commitID>回退到某个版本,这样就会有一个问题,你先上代码没有变,indexcommit都没有变,如果你修改本地代码后进行push,你会发现代码是冲突的

所以这种情况需要用用到下面的方法

2. 已经 push

如果你已经把所commit的代码push了,你想退回到某个版本,相当于,你想让服务器上的代码退回到某个版本,本地代码保持一致

那么我们需要使用revert命令:

git revert <commit_id>

使用revert有几个注意事项:

  • revert用于反转提交
  • 执行evert命令时要求工作树必须是干净的
  • revert用一个新提交来消除一个历史提交所做的任何修改

使用方式:

  1. 我们使用revert以后,本地代码就会回滚到某一个之前的版本版本
  2. 然后使用push命令,提交这个回滚的操作


拯救灾难性的反回复

这里我们先说一下一个重要的命令:

git reflog

有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如resetrebasemerge。甚至一些很小的操作,例如删除一个分支,我都担心数据丢失。

这是后我们就要说一下reflog,它会记录所有HEAD的历史,也就是说当你做resetcheckout…等操作的时候,这些操作会被记录在reflog中,有了这个东西,我们就不要太害怕数据丢失了。

下面我们来看一个例子:

我们首先看一下提交历史:

$ git log --oneline
e66158d (HEAD -> master) 第三次提交
1bb2a89 第二次提交
a4c4e40 第一次提交

现在一共有三次提交,但是我想回到第一次提交的场景,我们使用reset命令,但是我不小心执行了下面的命令:

$ git reset --hard a4c4e40
HEAD is now at a4c4e40 第一次提交

这个时候我发现新的代码全没了,怎么办,难道工作白做了吗?

我们知道git的修改都是指针的修改,只要我历史做过某次提交,那么我就一定能回到那个地方,只需要知道commit_id,但是怎么知道,这个时候我们就可以用reflog命令了,他记录了我的一切操作:

$ git reflog
a4c4e40 (HEAD -> master) HEAD@{0}: reset: moving to a4c4e40
e66158d HEAD@{1}: commit: 第三次提交
1bb2a89 HEAD@{2}: commit: 第二次提交
a4c4e40 (HEAD -> master) HEAD@{3}: commit (initial): 第一次提交

这样我们就找到第三次提交的commit_id了,那么用reset恢复吧

$ git reset --hard e66158d
HEAD is now at e66158d 第三次提交

代码回来了,谢天谢地!!!





总结:

这里附录一下比较底层一个关于git的博客:https://www.cnblogs.com/kekec/p/9248487.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值