git 我提交了,但我又后悔了

背景

在实际的开发工作中,使用git commit 总会遇到一些令人抓狂的提交,一切源于手欠和脑子不清醒,把一些不该提交的东西一起提交了。
在这里插入图片描述

不过还在Git还是能给我们后悔的机会。

场景模拟

    @PostMapping("/hhh")
    public String  test1(){
        AbsBatch batch = mapper.selectByPrimaryKey("dd");
        return  batch.toString();
    }

    @PostMapping("/hhhh")
    public String  test3(){
        AbsBatch batch = mapper.selectByPrimaryKey("dd");
        return  batch.toString();
    }

在这一次的提交中,我本来只需要提交test1这个方法,但是一不小心把test3也一起提交了o((⊙﹏⊙))o

case 1 已提交未push

这种情况处理起来比较简单。如果你适用的开发工具是idea时,就显得尤为简单。

undo commit

直接就是 右键 -> undo commit
在这里插入图片描述
直接把本地的git提交记录给去掉了,但是你之前对代码的修改还在(✪ω✪) 然后你就可以回到未提交的状态,然后重新提交。

reset

git reset --soft,–hard的区别

git reset 命令可以将当前的HEAD重置到特定的状态。
首先要搞清楚下面几个概念

  • HEAD: HEAD就是指向当前分支当前版本的游标
  • Index: Index即为暂存区,当你修改了你的git仓库里的一个文件时,这些变化一开始是unstaged状态,为了提交这些修改,你需要使用git add把它加入到index,使它成为staged状态。当你提交一个commit时,index里面的修改被提交。
  • working tree: 即当前的工作目录。

git reset 的用法
git reset [<mode>] [<commit>]
git reset 将当前分支的HEAD指向给定的版本,并根据模式的不同决定是否修改index和working tree。
常用的有三种模式,–soft, --mixed, --hard,如果没有给出则默认是–mixed

1 --soft

已经有未提交的更改:如果在执行软重置之前有未提交的更改,Git 可能会拒绝执行软重置操作。您可以通过提交或保存当前工作目录中的更改来解决此问题。
请一定注意这个

reset --soft相当于后悔药,给你重新改过的机会。对于上面的场景,就可以再次修改重新提交,保持干净的 commit 记录。

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

还有一点需要注意,在reset --soft指定 commit 号时,会将该 commit 到最近一次 commit 的所有修改内容全部恢复,而不是只针对该 commit。
使用 --soft参数将会仅仅重置HEAD到制定的版本,不会修改index和working tree

三次提交
第一次:test1.txt
第二次:test2.txt
第三次:test3.txt

在这里插入图片描述在这里插入图片描述
本地文件的内容并没有发生变化,而index中仍然有最近一次提交的修改,这时执行git status会显示这些修改已经在再暂存区中了,无需再一次执行git add。接下来就可以重新修改提交了。

2 --mixed

使用 --mixed参数与 --soft的不同之处在于, --mixed修改了index,使其与第二个版本匹配。index中给定commit之后的修改被unstaged。需要重新 git add .
在这里插入图片描述

3. --hard

使用–hard同时也会修改working tree,也就是当前的工作目录,如果我们执行git reset --hard HEAD~,那么最后一次提交的修改,包括本地文件的修改都会被清楚,彻底还原到上一次提交的状态且无法找回。所以在执行reset --hard之前一定要小心
不建议使用!

revert

如果你比较莽,直接就是一个revert commit,你就会悲催的发现:代码确实回退了,但是你的代码全部都不见了!!!∑(゚Д゚ノ)ノ 。如果你打算重写,那我只能表示:人山人海雅座一位!
想要你的代码回来,也有那么几种方法

  • 对 revert的这次提交再次进行revert or undo commit

但是呢,这里有个问题就是,重新revert找回的代码,额,提交不了。这时候你本地的代码和Git云上的代码就出现了不一致。我的建议:新建一个项目重新拉代码,那那个新项目里修改。

在这里插入图片描述

  • 查看git的提交记录,然后自己复制粘贴去(不推荐)
    在这里插入图片描述

case 2 commit and push

如果你跟我一样,就喜欢直接一步到位。每次都是提交和push一起操作的,那么这个过程就会麻烦不少。

处理

  1. 确保您的工作目录干净,并且没有未提交的更改。您可以使用git status命令检查当前工作目录的状态。

  2. 使用git log命令查看提交历史,并找到您想要重新提交的上次提交的哈希值(commit hash)。
    要查看上次提交的哈希值,您可以使用以下命令:

    git log --oneline
    

    这将显示最近的提交记录,每个提交记录都有一个简短的哈希值以及提交的摘要信息。最近的提交记录将显示在顶部。
    在这里插入图片描述

    如果您只想查看最近一次提交的哈希值,您可以使用以下命令:

    git log --oneline -n 1
    

    这将只显示最近一次提交的哈希值和摘要信息。

    请注意,哈希值是一串字符,通常由16进制数字组成。您可以使用这个哈希值来标识和引用特定的提交。

  3. 运行以下命令,将您想要重新提交的上次提交的部分内容添加到暂存区:

    git cherry-pick <commit-hash>
    

    <commit-hash>替换为您要重新提交的上次提交的哈希值。

    这将应用指定的提交,并将更改添加到暂存区。

  4. 运行以下命令,检查您的更改是否正确添加到暂存区:

    git status
    
    
    确保您只看到了您想要重新提交的部分内容被添加到了暂存区。
    
  5. 运行以下命令,提交您的更改:

    git commit -m "Recommit specific changes from previous commit"
    
    
    
    替换提交信息`"Recommit specific changes from previous commit"`为您自己的提交信息。
    
    这将创建一个新的提交,包含您重新提交的部分内容。
    
  6. 最后,如果您需要将更改推送到远程仓库,请运行:

    git push
    

    这将把您的新提交推送到远程仓库。
    请注意,git cherry-pick命令会将指定提交中的更改复制到当前分支,因此请确保您在正确的分支上进行操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值