• 跨分支提交的危害


         最近,在gerrit上遇到了一个奇怪的现象,开发人员A有一个问题要修改,这个问题本来是要提交到bugfix2分支,但是他本地没有切换到bugfix2分支上,而是在本地的bugfix1分支上直接修改了,然后push的时候,往远程的bugfix2分支上push,代码合入以后,发现在bugfix2分支上,除了要合入的那个提交,还多出了很多不相关的提交,这下糟了,这些不相关的提交在bugfix2上都是不需要的啊,但是这个时候要提测了,总不能一个一个提交的回退吧,不仅麻烦还会多处很多无用的提交,这是大家都不愿意看到的,尝试回退最后一次提交,看看会不会撤销带过来的无用改动,发现并不会,没办法,只能基于bugfix2分支的原来最后一次正确的提交节点拉一个新的2.0分支出来,即bugfix2_2.0先用着。

         在gerrit上观察A的那个提交,发现他的parent的并不是bugfix1上的最新提交,所以怀疑是他本地的bugfix1分支没有pull到最新的改动,然后就做了改动,咨询A以后,好像是没拉新代码,基于此,我使用了test工程来看看是否会复现他的这个现象。

          test仓库有两个分支,一个是master,一个是aaa

    (1)首先将aaa分支合入master分支,这样只是为了后面好看提交记录

    (2)在本地master分支上修改了并提交了commit1(改动是新建w1.txt),commit2(改动是新建w2.txt),commit3(改动是新建w3.txt)到远程master分支上,分别对应如下的"w1_test1","w2_test1","w3_test1",如下截图:

    (3)参考开发A出现的状况,本地master回退到commitid:5321c5196d2c465371d65a291494284070c80119,也就是commit1,然后添加了一个新的提交commit4(改动是新建w5.txt),这个commit4 push的时候,push到了远程的aaa分支上,如下的”w5_test1“:

    gerrit上打开这条提交,会发现对应的提交文件只有w5.txt,并且显示的”parent(s)“是commit1的id:5321c5196d2c465371d65a291494284070c80119,如下:

    (4)按照上面的提交,我们的意愿是只想提交commit4,即文件w5.txt的改动到aaa,但是在gerrit上把commit4提交merge到aaa分支后,本地切换到aaa分支,git pull拉取最新的代码,发现不仅有commit4的提交,还有commit1的提交,如下:

    所以,问题需要在哪个分支上改,本地就切换到哪个分支上修改,提交时提交到对应的分支,要在A分支上解决的问题,就在A分支上改,提交到A分支上,不要跨分支操作。

  • 相关阅读:
    [转]VirtualBox错误 Unable to load R3 module 解决方案
    2014工作感想
    人生的真正价值
    react生成二维码
    判断对象中是否包含某个属性
    使用reduce进行数组对象去重
    filter筛选
    判断区分安卓ios
    scrollIntoView 与 scrollIntoViewIfNeeded API 介绍
    vue中使用@scroll实现分页处理(分页要做节流处理)
  • 原文地址:https://www.cnblogs.com/zndxall/p/9916773.html
Copyright © 2020-2023  润新知