基于 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. linux下elasticsearch集成mongodb详细教程

    由于公司业务需要,要用elasticsearch做索引库实现搜索功能,历尽千辛万苦,最后总算把mongodb和elasticsearch集成成功 1.搭建mongodb集群 参考https://www ...

  2. JS判断两个数是否能除尽

    function judgeDivisor(m, n) { var num = {}; var i = 0; var x = parseInt(m / n); m = m % n; var resul ...

  3. javascript中闭包最简单的简绍

    javascript中闭包是什么 JavaScript 变量可以是局部变量或全局变量.私有变量可以用到闭包.闭包就是将函数内部和函数外部连接起来的一座桥梁. 函数的闭包使用场景:比如我们想要一个函数来 ...

  4. Java 开源博客 Solo 1.5.0 发布 - 新皮肤

    Solo 1.5.0 正式发布了!这个版本主要是加入了 一款新皮肤 next,感谢一直以来关注和支持我们的朋友! 只需一个命令即可启动(不需要安装数据库.部署容器):也可以通过 war 方式部署容器, ...

  5. linux安装redis+RedisDesktopManager

    一:redis简介 (REmote DIctionary Server Redis远程字典服务器)       1:Redis是一个开源的使用ANSI C语言编写.完全免费开源的,遵守BSD协议.支持 ...

  6. d3js enter/exit深入了解

    在 Data joins 章节我们演示了当data和dom element个数相同时的情况 <div id="content"> <div></div ...

  7. Sybase常用时间日期函数

    Sybase日期函数日期函数getdate()得到当前时间,可以设置得到各种时间格式.datepart(日期部分,日期)取指定时间的某一个部分,年月天时分秒.datediff(日期部分,日期1,日期2 ...

  8. Spring注解开发-全面解析常用注解使用方法之生命周期

    本文github位置:https://github.com/WillVi/Spring-Annotation/ 往期文章:Spring注解开发-全面解析常用注解使用方法之组件注册 bean生命周期 ​ ...

  9. OSG3.0.1的编译

    在OSG-中国有很多关于OSG的资料,包括OSG的编译和教程. 要编译OSG首先需要准备的包: 1,OSG3.0.1源代码: 2,CMAKE: 3,OSG用到的第三方库: 4,OSG Data:OSG ...

  10. July 28th 2017 Week 30th Friday

    If equal affection cannot be, let the more loving be me. 如果没有相等的爱,那就让我爱多一点吧. There is seldom equal a ...