删除误提交的 git commit

这篇具有很好参考价值的文章主要介绍了删除误提交的 git commit。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景描述

某次的意外 commit 中误将密码写到代码中并且 push 到了 remote repo 里面, 本文将围绕这个场景讨论如何弥补.

模拟误提交操作

  • 在 Gitee 创建一个新的 Repo, clone 到本地
git clone https://gitee.com/lpwm/myrepo.git
  • 创建两个文件, commit 后 push 到 remote 作为初始提交
cd myrepo
echo "A file" > A.txt
echo "B file" > B.txt
git add *
git commit -m "Initial commit"
git push

在 Gitee 检查提交成功:
删除误提交的 git commit,软件应用,Python,运维,git,squash

  • 分别修改两个文件, 模拟 A.txt 中误写入了敏感信息, B.txt 属于正常修改. commit & push
echo "Password is admin" >> A.txt
echo "Normal content appended" >> B.txt
git add *
git commit -m "Fault commit"
git push

删除误提交的 git commit,软件应用,Python,运维,git,squash

  • 接下来我们要实现的是从远端的 Repo 中修复(删除) A.txt 中误写入的敏感信息, 同时保留 B.txt 中正常的修改内容.

实现过程

主要思路是, 首先从当前已经误提交的状态创建一个新的 branch 作为备份, 在主 branch revert 回滚到误提交前一次的 commit, 强制 push 到 remote 端, 此时远端 repo 中就不会存在后面误提交的 commit 了. 再从备份的 branch merge 到当前 branch, 修改误操作的文件后提交新的 commit, 然后使用 squash 合并最近的两次 commit, 最后再 push 一把.

  • 检查已提交过的历史记录
git log

commit 327d1b09d7fdb43af596c05713d8424181a6b97b (HEAD -> master, origin/master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:21:24 2023 +0800

    Fault commit

commit 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:15:30 2023 +0800

    Initial commit
  • 创建新的 branch 作为备份, 但是不切换
git branch backup
  • 确认当前仍处于默认的 master branch
git branch

  backup
* master
  • 强制回滚到错误提交的前一次 commit, 即 Initial commit, 不保留后面做出的所有修改
git reset --hard 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4

  • 检查确认文件内容回滚到了当时的状态
cat A.txt

A file
  • 将当前状态强制推到 remote repo, 即从远端删除后面误提交的内容
git push --force
  • 检查确认 Gitee 中误提交的那次 commit 已经被删除
    删除误提交的 git commit,软件应用,Python,运维,git,squash
    误提交的内容是删掉了, 但是其他正常修改的文件内容也没了, 肯定是不行的. 接下来我们继续使用前面创建的 backup branch 来进行合并恢复和修补

  • 确认当前激活的 branch 是 master

git branch

  backup
* master
  • 将 backup 合并到 master
git merge backup
  • 检查 log, 可以看到 merge 后之前的误提交也回来了
git log

commit 327d1b09d7fdb43af596c05713d8424181a6b97b (HEAD -> master, backup)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:21:24 2023 +0800

    Fault commit

commit 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4 (origin/master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:15:30 2023 +0800

    Initial commit

  • 检查 A.txt 也可以看到误提交写进去的敏感信息
cat A.txt

A file
Password is admin

  • 这时候需要注意, 虽然文件内容是回来了, 但是我们都还是在本地进行的操作, 远端的 repo 中并不受影响, 因此我们可以继续修改 A.txt 文件内容, 将敏感信息删掉, 然后再提交一个新的 commit
echo "A file" > A.txt
git add *
git commit -m "Fixed commit"
  • 检查 log
commit b71cde372e30f7bec24a7a8d9086711ab517a2ba (HEAD -> master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:52:32 2023 +0800

    Fixed commit

commit 327d1b09d7fdb43af596c05713d8424181a6b97b (backup)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:21:24 2023 +0800

    Fault commit

commit 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4 (origin/master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:15:30 2023 +0800

    Initial commit
  • 将 “Fixed commit” 和 “Fault commit” 合并(squash)成一个 commit
git rebase -i HEAD~2

注意这里的 HEAD~2 表示从 HEAD 位置往前倒推选择两次 commit 记录进行编辑, 从上面的 log 也可以找到 HEAD 位置就是最近提交的这次 Fixed commit. git rebase 命令执行后会进入到交互编辑模式
删除误提交的 git commit,软件应用,Python,运维,git,squash
注意这里的 commit 显示顺序是倒着来的, 我们想要将 Fixed commit 合并入 Fault commit 里面, 因此需要修改 Fixed commit 前面的 picksquash, :wq保存后会出现新的 commit message, 默认是将两次的 commit message 拼接到了一起, 愿意改的就改一下, 然后继续保存, 提示 rebase 成功

git rebase -i HEAD~2

[detached HEAD 2f1bc19] Fault commit
 Date: Tue Dec 5 22:21:24 2023 +0800
 1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/master.
  • 再次检查 log, 可以看到除了最初的 Initial commit 外, 就只有一个上面合并后的 commit
git log

commit 2f1bc195739602a5d6d20e8438e143941b4e3359 (HEAD -> master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:21:24 2023 +0800

    Fault commit

    Fixed commit

commit 27b6ee4ed4a0ff44f2a5831fd5162075bef6a4b4 (origin/master)
Author: lpwm <lpwm@qq.com>
Date:   Tue Dec 5 22:15:30 2023 +0800

    Initial commit
  • 再 push 到 remote repo
git push
  • 检查 Gitee
    删除误提交的 git commit,软件应用,Python,运维,git,squash
    删除误提交的 git commit,软件应用,Python,运维,git,squash
    完美!

  • 最后要做的一步就是清理本地 backup branch, 注意这里要用 -D 参数, 等同于 --delete --force 强制删除, 如果是普通的 -d 删, 会提示 error: The branch 'backup' is not fully merged.

git branch -D backup

参考文档

Squash commits into one with Git文章来源地址https://www.toymoban.com/news/detail-758819.html

到了这里,关于删除误提交的 git commit的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试|Django 入门:构建Python Web应用的全面指南

    引言 Django 是一个强大的Python Web框架,它以快速开发和高度可扩展性而闻名。本文将带您深入了解Django的基本概念和核心功能,帮助您从零开始构建一个简单的Web应用。 什么是Django? Django 是一个基于MVC(模型-视图-控制器)设计模式的Web框架,旨在简化Web应用程序的开发过

    2024年02月02日
    浏览(60)
  • 使用Git rebase合并多条提交记录commit。以及使用 git commit amend本地提交直接合并到远程已有commit的用法

    需求场景一 : 对某个小的功能点进行多次反复的修改提交,且已经提交到远程,导致commit记录过多,太过于杂乱无章,想要精简合并一些提交记录。 场景还原: 比如下图4个git commit记录,log1-log4,需要将他们合并成一个提交记录 解决方案: 要处理的是log1-log4 这四条commit记

    2024年02月08日
    浏览(56)
  • git commit提交以及撤销commit操作详解

    在日常开发中,我们使用git作为版本控制工具管理分支代码,提交版本打标签十分便捷,但也经常会 遇到提交了想撤回的尴尬情况,///不过不用慌,平时养成发布版本前仔细核验的好习惯之外,还有 补救的措施,下面讲下使用git 如何提交信息,如何撤销以及修改信息等等。

    2023年04月19日
    浏览(49)
  • git撤销commit提交

            1)使用git log命令查看提交历史,找到要删除的记录的哈希值。         2)git rebase -i 命令指定要删除的哈希值。                 如git rebase -i abcdefgh # 表示删除该提交                    git rebase -i abcdefgh~1 # 表示要删除的提交的前一个提交。         3)git 会打开

    2024年02月17日
    浏览(59)
  • 强制提交 git commit

    尽管来说极其不推荐使用 git 的强制提交功能(多人协作的时候容易弄丢其他人的commit,且会影响其他人的开发). 但是有时候我们提交错了文件或者提交的文件中含有私钥等信息,强制提交可能是最简便的方法,那如何进行强制提交呢? 单分支强制 push 多分支强制提交

    2024年02月12日
    浏览(45)
  • git重新提交commit

    在Git中重新提交commit,通常是指修改最近的提交或者更早的提交。以下是一些常用的方法来重新提交commit: 修改最后的提交 如果你只是想修改最后一次提交的信息(比如提交信息写错了),你可以使用: bashCopy code git commit --amend 这将打开你的默认文本编辑器,允许你编辑提

    2024年02月22日
    浏览(40)
  • git commit 提交规范

    大致分为三个部分(使用空行分割): 标题行: 描述主要修改类型和内容 主题内容 页脚注释: 放 Breaking Changes 或 Closed Issues type commit 的类型: feat: 新功能、新特性 fix: 修改 bug perf: 更改代码,以提高性能(在不影响代码内部行为的前提下,对程序性能进行优化) refactor: 代码重构

    2024年01月18日
    浏览(55)
  • git 在 commit 提交之后怎么撤回本地提交

    当我们使用 git 开发时,一般会执行这几个命令: 可以使用下面这个指令撤回: 注意:这个指令只撤回本次 commit 提交,并不会回退您的代码,所以可以安心使用~ 如果只是单纯的commit 注释写错了,可以通过下面这个指令去修改: 完成。

    2024年02月11日
    浏览(50)
  • 【Git】合并多次commit提交

    原文作者 :我辈李想 版权声明 :文章原创,转载时请务必加上原文超链接、作者信息和本声明。 在开发阶段,由于我们会频繁的修改代码,会存在多次提交同一个修改,如果我们不合并提交,在于其他人代码合并时,会存在大量的commit提交记录,不利于代码版本。主要用过

    2024年02月20日
    浏览(47)
  • git修改提交信息commit

    问题出现,我们在开发版本任务的时候有新增需求,里面分重构原有需求 refactor ,新增需求 feat ,修复bug fix ,性能优化 perf 等等。这有利于团队代码评审 code Review 然而,我有次提交信息之后忘记写属于什么类型的需求了,得要改不能撤销,只能就行git操作 第一步使用 git

    2024年02月01日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包