基于 GitFlow 工作流,可能某个提交(commit)导致了 bug,或者有多个提交需要返工,此时你就会用到删除提交。
接下来的内容都基于下面这张 git log 提交记录图来写。

 
git log

删除最后的提交

当需要删除最新的提交、或最最近的几个提交。比如删除 1 或者 1~3 的提交,使用 git reset命令。
我们需要关注一下 git reset--hard--soft 参数。
举个例子删除最近两个提交看看:
git reset --soft commit~3 ,然后 git status

 
git-reset-soft

虽然删除了最近两个提交记录,但是还保存了提交所做的更改。那么你可能也想到了 --hard就是删除提交记录并不保存所删除记录所做的更改。所以,使用--hard要注意这些更改是否真的不要保存。

删除提交记录中间的提交

如果想要删除的提交不是最近的记录,而是在提交记录列表中间的一个或者多个,那么我们应该如何处理呢?
其中删除提交列表中间的 commit 又分为两种:删除中间连续的几个 commit 或者删除不连续的commit 。
举个栗子,你可能需要删除上图中的:commit3,commit4,commit~5;不连续的提交记录为 commit3,commit5 。那么 Git 是如何处理的呢?
** 删除提交记录列表中间一个或连续多个的提交用 rebase,不连续的使用 cherry-pick **
在这里我们只需要记住 rebase 就可以了。因为想要删除提交记录中间不连续的多个提交记录也可以变换为删除“提交列表中间的一个提交”,我们重复几次“提交列表中间的一个提交”的操作就可以了。所以,记住 rebase 的方法即可。

使用 rebase

首先贴一下我们需要用到的命令:
git rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>
接着我们来删除上图中的第二、第三个 commit:

  • git log看一下执行命令前的提交记录列表[红色部分表示即将要删除的commit]

     
    git log
  • 然后开始删除提交记录2,3[执行 rebase 时会可能遇到冲突,解决冲突不在本文描述范围]
     
    git rebase onto
  • git log看一下删除2,3 commit 之后的提交记录列表。
     
    git log

    对比一下删除提交记录前的 git log ,是不是 commit2,3 不见了呢。那么到这我们就完成任务了。

文章来源:查看

Git删除commit提交的log记录的更多相关文章

  1. Git删除已提交的文件

    Git删除已提交的文件 Git删除已提交的文件 定位文件 删除文件 参考链接 昨天通过Git Bash提交代码的时候遇到了由于单个文件大小超过100M,导致代码上传失败的问题.考虑到那个大文件是用于训 ...

  2. git查看commit提交记录详情

    相关的命令: git log:查看所有的commit提交记录: git show: 查看提交的详情: 首先,需要通过git log打印所有commit记录,例如: 1.查看最新的commit:git ...

  3. git 删除错误提交的commit

    方法: 根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:    git reset --mixed:此为默认方式,不带任何参数的git reset ...

  4. Git删除错误提交的commit

    git reset --hard <commit_id> git push origin HEAD --force

  5. git 删除错误提交commit(删除敏感文件)

    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch test/docs/456776898979.ap ...

  6. git删除和提交

    //删除git分支git branch -D BranchNamegit branch -r -D origin/BranchNamegit push origin -d BranchName//提交 ...

  7. git删除已经提交的包含敏感信息的文件(还没提交到远程仓库)

    写好的代码已经提交了(但还没push到github),发现某个文件里包含密码.如果push的话,密码可就被公开了.如果在代码里改掉密码,再commit一次,也不行,历史提交记录还是会上传到github ...

  8. git 查看commit提交的内容

    在使用git的过程中,我们经常需要查看某次commit修改了哪些内容,与之相关的命令就是: git log git show 首先,需要通过git log打印所有commit hashID,之后的gi ...

  9. git 删除所有提交下的某个文件

    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch upload/*' --prune-empty - ...

随机推荐

  1. 【SSH网上商城项目实战29】使用JsChart技术在后台显示商品销售报表

      转自:https://blog.csdn.net/eson_15/article/details/51506334 这个项目终于接近尾声了,注册功能我就不做了,关于注册功能我的另一篇博客详细的介绍 ...

  2. 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

    使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 网上的 MapReduce WordCount 教程对于如何编译 WordCount.java 几乎是一笔带过… 而有写到的 ...

  3. CSS 层叠与继承

    三种继承css方式 1.段内继承 <p style="color: red;font-size:50px;">样式原文</p> 原文变成 红色, 原文字体变 ...

  4. AngularJS+RequireJs实现动态加载JS和页面的方案研究【中】

    3.动态加载的内容: home.js [html] view plain copy 在CODE上查看代码片派生到我的代码片 define(['app'], function(app) { app.co ...

  5. js解决千分符问题[收藏下]

    //js数字千分符处理 function commafy(num) { num = num + ""; var re = /(-?\d+)(\d{3})/ while (re.te ...

  6. ioctl

    在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值. cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 ...

  7. win10_64位系统下安装ALM12.01(QC),笔者只在Win10平台上试过,大家也可以在win7的平台上试一下,一个道理!(Alpha)

    HP的ALM是一个非常全面的缺陷管理系统,但安装学习的非常的麻烦,以前学的是ALM,好久没用带今天想学习一下发现安装的非常的困难 !发现网上对ALM的系统安装的介绍非常少,也非常琐碎!今天就借着自己学 ...

  8. windows 下 openssl 生成RSA私钥公钥以及PKCS8

    生成RSA私钥 打开bin文件夹下面的openssl.exe,输入genrsa -out rsa_private_key.pem 1024 把RSA私钥转换成PKCS8格式 输入命令pkcs8 -to ...

  9. js构建类的方法

    Javascript是一种基于对象的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有Class.(不过,ES6引入了Class这个概念,作为对 ...

  10. css 笔记1

    type="text/css"的作用是什么?它是CSS样式的标记.type->类型,这里是style的属性text/css ->文本/css,即css文本type=&q ...