请教,合并 remote 的分支,出现遗漏情况,是什么问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
klgd
V2EX    git

请教,合并 remote 的分支,出现遗漏情况,是什么问题?

  •  
  •   klgd 2022-09-29 10:18:11 +08:00 2056 次点击
    这是一个创建于 1190 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如上图,第一次 merge 是从 style 那条,后来发现 3908 那条没有被 merge ,又进行了第二次 merge

    我的问题是: 每次 merge 都是从 remote 的 develop 分支 merge 的,而且从时间上来看 3908 那条提交在前,为什么会出现漏下的情况?

    11 条回复    2022-09-29 17:05:54 +08:00
    geelaw
        1
    geelaw  
       2022-09-29 10:23:34 +08:00
    有很多可能的原因,比如没有 fetch 就 merge ,或者 merge 之后 3908 才被 push 上去(那个时间并不是 push 的时间,而且 commit 的两个时间也是可以随便写的)。
    klgd
        2
    klgd  
    OP
       2022-09-29 10:41:55 +08:00
    @geelaw #1 “没有 fetch 就 merge ” 这个说的是本地分支吗?直接从 remote 分支合并不需要这个吧
    3908 可以确认是合并前已经 push 到 remote 分支了
    fulvaz
        3
    fulvaz  
       2022-09-29 10:49:51 +08:00
    用这个吧
    git fetch origin develop
    git merge FETCH_HEAD
    amosasas
        5
    amosasas  
       2022-09-29 11:02:27 +08:00
    @klgd 应该是要 fetch remote 到本地进行 rebase/merge 的
    ericls
        6
    ericls  
       2022-09-29 11:16:17 +08:00 via iPhone
    @klgd 需要。git 是分布式的 远程分支也是需要同步到本地的
    nothingistrue
        7
    nothingistrue  
       2022-09-29 11:17:06 +08:00
    @klgd #2 remotes/origin/develop 也是本地的,它是本地对远程分支的引用。fetch 过程,本质上就是从远程仓库刷新本地仓库的 remotes 引用,merge (不指定分支的默认情况)才是同步 remotes/origin/develop 到 develop 。
    klgd
        8
    klgd  
    OP
       2022-09-29 11:57:46 +08:00
    @amosasas #4
    @ericls #6
    @nothingistrue #7
    @fulvaz #3

    感谢大家的回复
    ![]( )

    之前一直是用 jetbrains 的 Git 功能操作的
    ` git -c credential.helper= -c core.quotepath=false -c log.showSignature=false merge --log --no-ff remotes/origin/develop`

    确实没有 fetch ,很奇怪,之前怎么没出现这个情况,难道之前都是事先 fetch 了,自己没注意,懵了
    Hug125
        9
    Hug125  
       2022-09-29 15:54:11 +08:00 via iPhone
    idea 有个插件 可以定时 fetch
    好像是 git box
    geelaw
        10
    geelaw  
       2022-09-29 16:09:03 +08:00   1
    @klgd #2 推荐的思考方法:假设你先上线,完成同步,此时 remote/branch 是 A ,然后离线,然后有人 push B 到 remote 的 branch ,然后你在离线的状态下 git merge remote/branch ,请问这是在 git merge A ,还是 git merge B ,还是 merge 不会成功呢?

    当然,我们相信 git 的设计是良好的,一个重要的特征就是各种操作的效果都尽量可预期,为此目的应该让本质上有不确定效果的操作(如 fetch ,它的效果取决于网络环境和远程计算机上的状态)尽量单独成立。我们 merge 的时候会先想好要 merge 的 commit 是谁,然后才操作,如果 merge 会自动 fetch ,那么它的效果就无法预期(因为我们看好的 branch 可能在 fetch 的时候变更),因此可以推断 merge 的时候不会自动 fetch ,此外 pull 的效果通常是 fetch+merge ,如果 merge 会自动 fetch ,那就没有单独成立 pull 的需要了。

    另外你可以看到 git 自动生成的消息表述十分准确,remotes/origin/develop 是 remote-tracking branch ,不是 remote branch 。
    klgd
        11
    klgd  
    OP
       2022-09-29 17:05:54 +08:00
    @geelaw #10 感谢,之前理解有偏差,我知道 git fetch 后再 merge ,不过没往这方面想,以为 jetbrains 在合并时做了这些事情


    @Hug125 #9 谢谢 我一会儿去看看
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2299 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 02:06 PVG 10:06 LAX 18:06 JFK 21:06
    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