新鸟入职,请教老哥们三个关于 git 的问题!感谢! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
WhoCanBeRich

新鸟入职,请教老哥们三个关于 git 的问题!感谢!

  •  
  •   WhoCanBeRich 2019 年 6 月30 日 2495 次点击
    这是一个创建于 2491 天前的主题,其中的信息可能已经有所发展或是发生改变。
    三个问题哈~
    1、lz 平时写项目写项目都喜欢用 rebase,因为这样到时候追 bug 的时候可以将多条 commit 的记录翻出来修,但是公司比较推荐用 merge,这样别人看你的提交只会是一条 commit,比较简洁。
    2、刚入职我操作公司的 git 总是会出现一些问题,总让自己的 mentor 帮忙解决非常不好意思,顺便也问一下老哥们我下面的这样的操作 git 的方式 OK 吗,会不会存在什么潜在的问题?
    -->[trunk_myself](我自己的分支):
    git fetch
    git rebase origin/company_trunk
    [出现冲突:开始修冲突]
    git add 冲突文件
    git rebase --continue
    git add .
    git commit -m 'xxx'
    -->[company_trunk](公司的分支):
    git co company_trunk
    git rebase trunk_myself
    git st
    [Your branch is ahead of 'origin/company_trunk'
    [编译,防止合并代码的时候有人提交新的代码]
    git fetch
    git rebase
    [查看 sourceTree 节点是否正常]
    git push
    3、如果用 merge 的话,直接把上面的'rebase'替换成'merge'会不会出现什么问题呢?
    23 条回复    2019-07-08 20:58:55 +08:00
    iConsLii
        1
    iConsLii  
       2019 年 6 月 30 日
    1、公司的项目跟着公司规定走吧
    iConsLii
        2
    iConsLii  
       2019 年 6 月 30 日
    @iConsLii
    2、用 rebase 的话,会导致 commit log 流失或者顺序错乱的吧
    3、不会出现什么问题
    leo108
        3
    leo108  
       2019 年 6 月 30 日
    你自己的分支怎么 rebase 都无所谓,但是公共的分支(比如你说的 company_trunk )执行 rebase 操作的话……没被同事打死真是幸运呢。
    Xbluer
        4
    Xbluer  
       2019 年 6 月 30 日
    @iConsLii #2 rebase 会丢失一些信息,但不是 commit log。另外顺序错乱也不会啊。

    @leo108 #3 rebase 的时候不要变更已经发布到服务器上的提交不会有问题,而且服务器上一般都可以控制禁止 force push。
    WhoCanBeRich
        5
    WhoCanBeRich  
    OP
       2019 年 6 月 30 日
    @iConsLii 好的 谢谢老哥!
    WhoCanBeRich
        6
    WhoCanBeRich  
    OP
       2019 年 6 月 30 日
    @leo108 好的哈哈 那我还是用 merge 啦 谢谢你啦 :)
    WhoCanBeRich
        7
    WhoCanBeRich  
    OP
       2019 年 6 月 30 日
    @Xbluer 好的 谢谢你啦!
    ColinZeb
        8
    ColinZeb  
       2019 年 6 月 30 日 via iPhone
    @leo108 Rebase 也是一种推送方式,不只是分支合并用的
    leo108
        9
    leo108  
       2019 年 6 月 30 日
    @Xbluer 在公共分支执行了 rebase 之后又不 force push ?那这个操作的意义何在?


    @ColinZeb 你确定 rebase 是一种「推送」方式?
    Xbluer
        10
    Xbluer  
       2019 年 6 月 30 日
    @leo108 #9 比如说本地分支 feature/abc 跟踪远程分支 origin/feature/abc。 在本地 feature/abc 上直接开发并提交到本地,执行 pull --rebase 可以将本地修改的内容在最新的 origin/feature/abc 最新的版本上衍合,然后执行 push 操作就可以,并不需要 push --force。 提交日志只有一条直线,所有开发者的开发活动像是依次顺序完成的,简洁明了。
    wsxyeah
        11
    wsxyeah  
       2019 年 6 月 30 日 via iPhone
    你的 company_trunk 是指 develop,master 这类分支?这类通常会设为 protected branch,是不允许 push 的,只能通过 mr 合进去。
    你自己的 feature 分支当然可以 rebase。
    ColinZeb
        12
    ColinZeb  
       2019 年 6 月 30 日
    @leo108 git fetch -> git rebase(这里的是未推送的提交 rebase 到 head 上)-> git push
    leo108
        13
    leo108  
       2019 年 7 月 1 日
    @Xbluer 你仔细看楼主贴的操作记录,是在 company_trunk rebase 了自己的分支,这种情况必然需要 force push。
    leo108
        14
    leo108  
       2019 年 7 月 1 日
    @leo108 #13 除非楼主之前本地的 company_trunk 与远端的一致
    WhoCanBeRich
        15
    WhoCanBeRich  
    OP
       2019 年 7 月 1 日
    @leo108 应该不用 force push 吧,我已经 git fetch 过了,也就是本地的 company_trunk 与远端的一致了
    leo108
        16
    leo108  
       2019 年 7 月 1 日
    @WhoCanBeRich 这个就是时间差问题了,假如你在处理冲突时花了较多的时间,那么就有可能出现别人 push 了新的 commit 到远端分支。
    你的方法可能在大多数时候是可行的,但不代表这是一个正确的方法,
    WhoCanBeRich
        17
    WhoCanBeRich  
    OP
       2019 年 7 月 1 日
    @leo108 是 所以我也说[编译,防止合并代码的时候有人提交新的代码]哈
    WhoCanBeRich
        18
    WhoCanBeRich  
    OP
       2019 年 7 月 1 日
    @leo108 你有什么建议可以让我完全避免这种潜在问题嘛 (除了 force push..如果 force 我会被打死的
    leo108
        19
    leo108  
       2019 年 7 月 1 日
    @WhoCanBeRich 如果对 rebase 理解不够到位,建议还是用 merge 吧。
    WhoCanBeRich
        20
    WhoCanBeRich  
    OP
       2019 年 7 月 1 日
    @leo108 但是用 merge 也会存在你说的这个问题呀:"这个就是时间差问题了,假如你在处理冲突时花了较多的时间,那么就有可能出现别人 push 了新的 commit 到远端分支。"
    Xbluer
        21
    Xbluer  
       2019 年 7 月 8 日
    @leo108 #13 company_trunk rebase 自己的分支不是问题。你再看看前面的操作,楼主自己分支 也 rebase origin/company_trunk 了。只要 push 之前没有其他同事 push 更新 origin/company_trunk 就好了。即便有人更新了,直接在 company_trunk 分支执行 pull --rebase 并解决冲突就好了。
    leo108
        22
    leo108  
       2019 年 7 月 8 日
    @Xbluer #21
    你看我在 #16 的回复,「你的方法可能在大多数时候是可行的,但不代表这是一个正确的方法」,你都知道 pull --rebase 这个命令了,为何不直接在自己的分支 rebase 一下 company_trunk 而是要绕那么大一圈。
    Xbluer
        23
    Xbluer  
       2019 年 7 月 8 日
    @leo108 #22 我只是按照楼主的现状说明过程的。实践中并不需要一个所谓的自己的分支,直接本地 company_trunk
    分支开发就好了,并设置跟踪 origin/company_trunk。

    你引用你自己的那句话并不正确,一直是可行的。问题其实就是本地分支落后远端分支,不管 rebase 和 merge 总是一直都是可行的。至于解决冲突耗费时间长短,那只能说明操作习惯有问题,应该及时和远端分支同步。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2790 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 13:10 PVG 21:10 LAX 06:10 JFK 09:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86