博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git : local -> gerrit;如果避免不断产生新的patch
阅读量:4181 次
发布时间:2019-05-26

本文共 798 字,大约阅读时间需要 2 分钟。

如果,你已经提交了一次gerrit,共4个commit(1,2,3,4(top)),都被review过了, 但是其中有一个(例如第二个commit: 2)是不合格的提交,要求重新修改。

如果你在本地,git rebase -i HEAD~3, 然后重新git push gerrit HEAD:refs/for/, 那么,除了commit2之外, commit3 ,commit4,在gerrit上也重新生成了新的patch,尽管这个patch和之前的patch内容没变,但是review过得标志被清空了,因为是新的patch了,讨厌的不知如此, 你添加过的review list 人员都会不断受到你的更新的垃圾邮件。

解决的办法:

从gerrit上checkout 出 commit2到本地的一个新的branch上,这时候,commit1和commit2会被拉下来, git commit --amend 来修改commit2, push之后gerrit上的1,3,4不会生新的patch。 注意,3,4不生成新的patch可以理解,1也不生成新的patch么? 是的, 因为用的是git commit --amend;但是如果用git rebase -i HEAD~2在本地来修改commit2的话, push之后 gerrit 上的commit1就生成新的patch; 但是如果用git rebase -i HEAD~1的话, 也是没问题的,因为我只rebase 了commit2, 而commit1没有发生任何变化。

ps: gerrit上的checkout 和 cherry-pick  区别: 

checkout 会把这个commit的depends on 这个有依存关系的commit一并更新下来,

cherry-pick 则只是单独的将这个commit更新下来,会破坏原有的依存关系。 

转载地址:http://bvhai.baihongyu.com/

你可能感兴趣的文章
Commons CLI 使用介绍
查看>>
Mybatis 缓存实现原理——案例实践
查看>>
Mybatis 缓存实现原理
查看>>
怎么提升SQL查询效率
查看>>
预编译防止sql注入
查看>>
覆盖equals方法时总是要覆盖hashCode
查看>>
clone详解
查看>>
【Java并发编程实战】——AbstractQueuedSynchronizer源码分析(一)
查看>>
【Java并发编程实战】——并发编程基础
查看>>
【Java并发编程实战】——Java内存模型与线程
查看>>
Java复制文件的4种方式
查看>>
mysql的JDBC连接工具类
查看>>
利用多线程(用到原子类AtomicInteger)往数据库批量插入大量数据
查看>>
多个线程操作数组
查看>>
定长线程池的应用
查看>>
ArrayBlockingQueue的简单使用
查看>>
Git 常用命令总结(一)
查看>>
Git 常用命令总结(二)
查看>>
JAVA 并发——synchronized的分析
查看>>
Echarts——使用 dataset 管理数据
查看>>