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

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

虽然删除了最近两个提交记录,但是还保存了提交所做的更改。那么你可能也想到了 --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记录的更多相关文章
- Git删除已提交的文件
Git删除已提交的文件 Git删除已提交的文件 定位文件 删除文件 参考链接 昨天通过Git Bash提交代码的时候遇到了由于单个文件大小超过100M,导致代码上传失败的问题.考虑到那个大文件是用于训 ...
- git查看commit提交记录详情
相关的命令: git log:查看所有的commit提交记录: git show: 查看提交的详情: 首先,需要通过git log打印所有commit记录,例如: 1.查看最新的commit:git ...
- git 删除错误提交的commit
方法: 根据–soft –mixed –hard,会对working tree和index和HEAD进行重置: git reset --mixed:此为默认方式,不带任何参数的git reset ...
- Git删除错误提交的commit
git reset --hard <commit_id> git push origin HEAD --force
- git 删除错误提交commit(删除敏感文件)
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch test/docs/456776898979.ap ...
- git删除和提交
//删除git分支git branch -D BranchNamegit branch -r -D origin/BranchNamegit push origin -d BranchName//提交 ...
- git删除已经提交的包含敏感信息的文件(还没提交到远程仓库)
写好的代码已经提交了(但还没push到github),发现某个文件里包含密码.如果push的话,密码可就被公开了.如果在代码里改掉密码,再commit一次,也不行,历史提交记录还是会上传到github ...
- git 查看commit提交的内容
在使用git的过程中,我们经常需要查看某次commit修改了哪些内容,与之相关的命令就是: git log git show 首先,需要通过git log打印所有commit hashID,之后的gi ...
- git 删除所有提交下的某个文件
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch upload/*' --prune-empty - ...
随机推荐
- java简单数组定义
public class Shuzu { static int[] array = new int[] { 32, 2, 2, 5, 45, }; int[] array1[] = new int[1 ...
- LeetCode 533----Lonely Pixel II
问题描述 Given a picture consisting of black and white pixels, and a positive integer N, find the number ...
- PyCharm添加Selenium与Appium依赖
- ubuntu16下面安装vmware tools后仍然未全屏问题
1.默认下载ubuntu16的iso镜像后,自带的有vmtools.解压 tar -xzvf VMwareTools-10.0.6-3595377.tar.gz 进入解压目录. 执行:sudo ./ ...
- spring事务的理解
特性 一致性:业务处理要么都成功,要么都失败,不能部分成功不分失败 原子性:业务操作是由多个动作完成,这些动作不可分割,要么都执行,要么都不执行 隔离性:事务间之间要做隔离,不要互相影响 持久性:操作 ...
- MSSQL->serverlink[Oracle]
需求描述: SQL Server数据库连接Oracle数据库 条件准备: SQL Server数据库,SQL Server 2008R2 Oracle数据库,Oracle ...
- C#调用C++函数
一.新建C++项目 1.在VS2012中新建->项目->模版->其他语言->Win32->Win32项目->下一步->选DLL,导出符号. 2.在XX.h项目 ...
- rabbitmq集群几个比较好的文章
以下几个链接可作为搭建rabbitmq集群是的参考,个人觉得写的很详细很好 1.RabbitMQ 高可用集群搭建及电商平台使用经验总结 http://www.cnblogs.com/wangiqngp ...
- Windows Server 2012 AD域管理创建
前言 关于AD域管理及其权限划分概论: 1. AD域源于微软,适用于windows,为企业集中化管理和信息安全提供强力保障. 2. 提供域中文件夹共享,但同时又对不同用户有不用的权限. 3.通过对设备 ...
- webapi 支持 text/plain 请求
今天遇到一个需求,请求以HTTPS + XML 访问我的API ,普通的webapi 是不支持这个请求的,故做以下代码进行支持 新增一个类,类名为PlainTextTypeFormatter publ ...


