十分钟帮你解决git amend 错误
2018-01-23 17:50
190 查看
原文出处:https://www.cnblogs.com/dsxniubility/p/5817776.html
一、问题回顾
问题是git commit --amend 引起的。 一条commit已经push到远端develop了,但是后来又在这条commit上进行了amend操作,导致这条commit的哈希码发生了变化。并且后续又在这条commit之后进行了N条commit操作。<Begin>
大概的情况画了个简图,如图所示。下面的绿色就是最后相同的地方,红色的那条做的是相同的功能message是一样的,但是提完develop之后又改动了很多然后使用amend挤压了。
这个时候比较头疼了,因为那条amend的commit里面是发生了太多改动,我采用的是可以避免冲突的方法,但是会改develop的commit树
<End>
这样改完之后develop的commit树如上图所示(第97条就是把之前的97,98,99挤压成的1条),可以编译通过功能都能实现。 但是缺点是这时候需要强推develop了。
组里另一个人提出的解决方案是
<Begin>(图再贴一遍
省的往上翻)
<End>
可以看出这种做法,不需要强制push develop的代码。理论上更加科学,但是中间需要解决大量的冲突。
事后反省一下,觉得两种方法其实各有优劣,如果组内成员不多,可以在大家的监督下 完成强推develop的操作。 因为解决了大量冲突可能会比 非常清晰了解差异后-f强推develop更容易出现错误。 当然如果是大型项目,几十人团队,并且远端都绑上了编译检查,和merge规则的项目也只能使用第二种方法了。
二、其他经验
对于一个码农而言,比写出bug更恐怖的是把代码弄丢了或弄乱了。 对于这种问题也是有一种统一的解决方案①.git reset --hard 哈希码 , 这条非常普遍,如果出现问题有点乱直接回到一个安全的commit
②.git reflog 对于有rebase或merge这种操作,第一条指令就用不了了,因为被污染的并不仅仅是最后一条commit。 这时要用这个万能恢复指令,回到一个操作的哈希码。
③.但是前两种方法都是对于一些已经加入过git的代码进行恢复。 如果一些代码还没有commit 这时候弄丢了 那些指令就都帮不了你了。 这时候只能看IDE有没有local history了。(local history相当于IDE帮你实现了一个类似于git的功能)之前就有过一次第3种情况的经历,当时是把没commit的代码给reset了
使用localhistory得以恢复。好在现在iOS的xcode 和 Android的Android Studio都是有local history的,
Xcode 的local history在 导航栏 → View → Version Editor → show Version Editor
Android Studio 的local history在 左边文件目录 → 选中根目录 → show local history
备注:
git reflog :
显示整个本地仓储的commit, 包括所有branch的commit, 甚至包括已经撤销的commit,
只要HEAD发生了变化, 就会在reflog里面看得到. git log只包括当前分支的commit.
相关文章推荐
- vs2012编译基于CGAL4.8.1应用时候最后出现链接错误_imp_gmpq_init等解决
- ASP调试程序问题解决:ADODB.Connection 错误 '800a0e7a' 未找到提供程序。该程序可能未正确安装
- IIS HTTP 500内部服务器错误的解决方法
- 系统无法启动,/contains a file system with errors, check forced错误解决方法
- maven项目出现web.xml is missing and <failOnMissingWebXml> is set to true错误的解决办法
- SqlServer try catch 捕获不到的一些错误及解决方法
- 解决jQuery使用JSONP时产生的错误
- RAR软件解压出现CRC错误的“另类”解决方法
- Nginx 502 Bad Gateway错误的原因分析与解决方法
- Cisco *** 442错误解决方法
- expdp 中ORA-39002、ORA-39070错误详解及解决办法
- ios 调试技巧收藏 一 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 附加数据库时报错 错误5123,操作系统错误5(拒绝访问)解决办法(转)
- 解决 phpMyAdmin 的 "Configuration of pmadb…错误" 问题
- Virtualbox中添加现有磁盘错误的解决方法
- 解决win2003的搜索出现“意外错误,操作无法完成”(轻松解决)
- git错误解决 -- 小结
- MySQL 数据批量恢复时 [Err] 2006 - MySQL server has gone away 错误的解决
- Field requires API level 5 (current min is 4)等相关错误的解决
- oracle提示 ORA-12154错误解决方法