git 删除中间某次commit,重新提交到远程
2015-06-16 12:53
183 查看
问题现象:
在修改android源码的时候,我在本地同一分支上做了两次修改并提交到远程,分别取名A和B吧。然后在Gerrit上提交A review不通过,提交B review通过,虽然B同意入库,但是却依赖于A,因此也无法入库。偏偏我本地已经删除了当时做了修改的分支(repo abandon)。那么我该如何在不重新修改代码的情况下,让B可以入库呢?
期望结果:
在不改动代码的情况下,使提交B不再依赖于提交A并成功入库。
步骤:
(为了安全我们尽量避免在主分支上操作)
找回已删除的提交
1)新建恢复分支
repo start recovery .
2)找回之前的提交
git reflog 查看操作历史,找到之前提交B的 hash 值,然后 git reset –hard B的hash值, 即可。
使用git log查看,我之前的两次修改都找回了。
删除提交A,只保留提交B
1)新建要上传的分支
repo start upload .
2)恢复提交B
git cherry-pick (B的hash值)
3)git log查看效果
如果没问题的话,就可以git commit –amend之后再 repo upload . 提交了。
按照上面的步骤操作如果不能得到预期效果的话可以试试用别的命令。
中心思想为:
1. 找回已经删除的提交信息
2. 新建一个分支并只恢复提交B
3. 重新上传
注:因为我本地代码是repo管理,读者可根据自身情况使用对应的git命令。
参考链接:
1. 从Git仓库中恢复已删除的分支、文件或丢失的commit
2. git 删除某次指定的提交
在修改android源码的时候,我在本地同一分支上做了两次修改并提交到远程,分别取名A和B吧。然后在Gerrit上提交A review不通过,提交B review通过,虽然B同意入库,但是却依赖于A,因此也无法入库。偏偏我本地已经删除了当时做了修改的分支(repo abandon)。那么我该如何在不重新修改代码的情况下,让B可以入库呢?
期望结果:
在不改动代码的情况下,使提交B不再依赖于提交A并成功入库。
步骤:
(为了安全我们尽量避免在主分支上操作)
找回已删除的提交
1)新建恢复分支
repo start recovery .
2)找回之前的提交
git reflog 查看操作历史,找到之前提交B的 hash 值,然后 git reset –hard B的hash值, 即可。
使用git log查看,我之前的两次修改都找回了。
删除提交A,只保留提交B
1)新建要上传的分支
repo start upload .
2)恢复提交B
git cherry-pick (B的hash值)
3)git log查看效果
如果没问题的话,就可以git commit –amend之后再 repo upload . 提交了。
按照上面的步骤操作如果不能得到预期效果的话可以试试用别的命令。
中心思想为:
1. 找回已经删除的提交信息
2. 新建一个分支并只恢复提交B
3. 重新上传
注:因为我本地代码是repo管理,读者可根据自身情况使用对应的git命令。
参考链接:
1. 从Git仓库中恢复已删除的分支、文件或丢失的commit
2. git 删除某次指定的提交
相关文章推荐
- Uva - 572 - Oil Deposits
- python学习笔记(二)
- Uva - 572 - Oil Deposits
- Linux共享内存使用常见陷阱与分析
- C++ mkdir() 头文件
- 深入分析 Java 中的中文编码问题
- Rational Rose2007(v7.0)下载地址、安装及激活详解教程(图)
- LAMP环境下搭建discuz!论坛
- 如何在 Apache 中抵御暴力破解和 DDoS 攻击
- 北京c++技术交流 235760268
- opencv cvHoughCircles() 霍夫圆变换
- Python学习(三)---常见类型转换、数值操作、序列操作
- AVCaptureDevice iOS摄像头属性
- Android训练课程(Android Training) - 测试你的Android Activity
- OJ 继承与组合
- 一个宏命令,就可以程序崩溃时生成dump文件
- 有关网页渲染,每个前端开发者都该知道的那点事
- Ajax个人理解2
- phonegap(cordova)文件上传(Java,PHP)
- 一个简单易懂的javascrip selection&range小案例