Git如何修改一个过去的Commit
假设我的git log 如下:
commit 5511533dda6fee6982175fafca1f4bd5692e3d9c (HEAD -> trans, origin/trans)
Author: 暮晨 <362864550@qq.com>
Date: Tue Nov 13 23:57:05 2018 +0800
EX.is is not what it is
commit eff078c67243a71a5ef645ddadfdaef2f374eff1
Author: 暮晨 <362864550@qq.com>
Date: Sat Nov 10 23:22:19 2018 +0800
EX.Time for some hash brownies
commit eb69bff965ee57c5047afc4f615c10462c42566a
Author: 暮晨 <362864550@qq.com>
Date: Sat Nov 10 17:41:55 2018 +0800
EX.Strings can be tricky sometimes
我现在需要回到第一个commit eb69bff96 对文件进行修改。
那么需要进行如下操作:
将当前分支无关的工作状态进行暂存
git stash
将HEAD移动到需要修改的commit上
git rebase eb69bff96^ --interactive
找到需要修改的 commit ,将首行的
pick改成edit后保存开始修改文件内容
将改动文件添加到残存
git add
追加改动到提交
git commit --amend
移动HEAD 回到最新的commit
git rebase --continue
恢复之前的工作状态
git stash pop
有什么用
最现实的用处是如果你不小心把密码等敏感信息上传了,需要删掉,但后面又已经有新的commit信息你又不希望丢掉的时候,这个方法就派上用场了。
我的使用场景则是在github上翻译文档,希望能保证每个commit都是原文和译文的对照,方便他人觉得译文有问题的时候能快速获取原文。
而译文的多次修改如果分开提commit的话会让寻找原文变得很麻烦。
缺点
被修改分支后的所有commit都会被重新提交一遍,此时master分支merge这个分支的话会出现commit重复的问题。所以也只能在没有其他分支的情况下在主分支干这事。
Git如何修改一个过去的Commit的更多相关文章
- git批量修改已经提交的commit的姓名和邮箱
首先,我们创建change.sh脚本,并根据个人信息复制以下脚本. #!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="填写原来的邮箱 ...
- 通过git rebase修改commit message
今天发现一个项目的git commit message中的单词拼错了,需要修改一下.但这样简单的修改,需要通过git rebase才能完成. 首先要git rebase到需要修改message的那个c ...
- Git 修改已提交的commit注释
两种情况: 1.已经将代码push到远程仓库 2.还没将代码push到远程仓库,还在本地的仓库中 这两种情况下的修改大体相同,只是第一种情况最后会多一步 下面来说怎么修改 先搞清楚你要修改哪次的提交注 ...
- git修改已经push的commit message
git中修改上一次提交的commit的message git commit --amend -m "你的新的注释" git push -f 多个commit https://www ...
- Git 修改历史提交信息 commit message
修改最近一条提交的消息 git commit --amend 进入vim模式 按字母 o 或者 insert键 开始修改内容 按 esc 推出编辑,最常用的是输入":q"直接退出, ...
- Git remote 修改源
Git remote 修改源 git commit -m "Change repo." # 先把所有为保存的修改打包为一个commit git remote remove orig ...
- GIT 查看/修改用户名和邮箱地址
用户名和邮箱地址的作用用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变.每次commit都会用用户名和邮箱纪录.github的contributions统计就是按邮箱来统计的.查看用户 ...
- Git 撤销修改
Git 撤销修改 增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言,这个例子中是HEAD,实际上可以指定其他有效的提交名称. 如果参数是小写的-c, ...
- Git学习笔记——一个NB的分布式版本控制系统
1. 命令: git init 创建新仓库 (在一个空文件下然后执行命令) git clone + 路径 检出仓库,从本地或从服务器上 git status 查 ...
随机推荐
- [转]JDK1.0到12各版本新特性
原文链接 JDK Version 1.0 1996-01-23 Oak(橡树) 初代版本,伟大的一个里程碑,但是是纯解释运行,使用外挂JIT,性能比较差,运行速度慢.JDK Version 1.1 1 ...
- 连接mysql,oracle的命令 以及导入sql文件
Oracle 1,sqlplus username/password 导入: 2,@后面跟着sql文件的路径,回车,导入数据 @D:/test.sql; 导入完毕,输入commit; MySQL: ...
- Build ear package
build 单个service ear TestService -> TestService 修改file Location地址(放在你指定的位置) 点击Build Archive succes ...
- Shell函数!
1.作用:将命令序列按格式写在一起,可方便重复使用命令序列2.Shell 函数定义格式:[ function ] 函数名(){命令序列[ return x ]}3.调用函数的方法:函数名 [ 参数 1 ...
- 设计模式课程 设计模式精讲 3-4 依赖倒置原则讲解+coding
1 课程讲解 1.1 定义 1.2 优点 1.3 细节描述 2 代码演练 2.0 代码展示优点 2.1 非面向接口编程 2.2 面向接口编程1 传参 2.3 面向接口编程2 构造函数 2.4 面向接口 ...
- php面试题之PHP核心技术
一.PHP核心技术 更多PHP相关知识请关注我的专栏PHPzhuanlan.zhihu.com 1.写出一个能创建多级目录的PHP函数(新浪网技术部) <?php /** * 创建多级目录 * ...
- FreeSWITCH 加载模块过程解读
今天来学习FreeSWITCH 加载模块过程. 哪些模块需要编译,是由源码下的 modules.conf 文件决定的. 哪些模块在程序启动时自动加载,是由 freeswitch/conf/autolo ...
- ShellCode模板
前言 在上一篇文章上使用到的添加用户的shellcode是怎么得到的呢? 先来拆分一下汇编的功能 ;寻找kernel32.dll的基地址 xor ecx,ecx mov eax,dword ptr f ...
- “数据接口请求异常:error”,Layui-table使用遇到的最大一个坑
后台返回的json格式必须和官方给的一模一样 code必须为0, code必须为0, code必须为0, code必须为0
- oracle查询连续n天登录的用户
-- 查询连续3天登录的用户 1 先创建一个表,如下: create table USER_DATA ( USER_ID NUMBER, LOGIN_TIME DATE ); 2 插入用户登录数据: ...