V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
linuxsteam
V2EX  ›  git

请教 cherry-pick 冲突的原因

  •  
  •   linuxsteam · 2022-05-15 20:58:26 +08:00 via iPhone · 2198 次点击
    这是一个创建于 683 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请问跟 git commit 产生冲突的原因一样吗?或者说就是一次 git commit ,然后进行 push ?
    11 条回复    2022-05-20 21:53:18 +08:00
    bluesky139
        1
    bluesky139  
       2022-05-15 21:01:17 +08:00 via Android
    你把它想象成就是 merge 单条提交就对了,不一样的地方肯定会冲突。
    linuxsteam
        2
    linuxsteam  
    OP
       2022-05-15 21:04:22 +08:00 via iPhone
    @bluesky139 唉,关键有次提交是 cherry-pick 过去的。少过去一部分代码。不知道为啥 git 会把有些代码忽略掉
    bluesky139
        3
    bluesky139  
       2022-05-15 22:22:56 +08:00 via Android
    我觉得不大可能是忽略,你可以到之前那里 branch 一个分支出来,再 cherry-pick 一次,重现一下当时的情况,再仔细观察下。
    statumer
        4
    statumer  
       2022-05-15 22:38:00 +08:00 via iPhone
    有个东西叫 format-patch ,可以把你要 cherry-pick 的 commit 转换为 patch ,看看 patch 里面有什么东西。
    linuxsteam
        5
    linuxsteam  
    OP
       2022-05-15 22:49:55 +08:00 via iPhone
    @bluesky139 也许吧。。希望可以复现。同事是通过 gerrit ,进行 cherry-pick 的。
    monetto
        6
    monetto  
       2022-05-16 09:51:08 +08:00
    cherry-pick 相当于是 将 某一分支的 commit 代码中的变更点,单独提取出来,当作一次 “重写”,并加入到当前分支。

    如果对应的 Commit 中修改的代码,在当前分支中不存在,则会冲突。

    如果当前分支已经包含部分修改过的代码(即使代码一摸一样,但是不属于一个 Commit ),也会造成冲突。

    建议下载一个 IDEA 社区版(开源免费),使用里面的 Git 工具进行操作,会简单舒服很多。
    zmal
        7
    zmal  
       2022-05-16 10:35:18 +08:00
    @linuxsteam 确实不可能 cherry-pick 后忽略...不要信任同事,自己再操作一遍试试。
    linuxsteam
        8
    linuxsteam  
    OP
       2022-05-17 21:48:31 +08:00
    @monetto
    > 如果当前分支已经包含部分修改过的代码(即使代码一摸一样,但是不属于一个 Commit ),也会造成冲突。
    我现在遇到了 代码不属于同一个 commit ,但是成功合并变更点。没有提示冲突。。自己建立个仓库没模拟出来😭
    monetto
        9
    monetto  
       2022-05-18 09:55:44 +08:00
    @linuxsteam emm ,这样呢。

    分支 A ,在某个文件上,加入一行 “123”,创建 CommitA 。
    分支 B ,在某个文件上,加入一行 “123”,创建 CommitB 。

    这时候 切换到 分支 B ,对 CommitA 进行 charry-pick 。
    monetto
        10
    monetto  
       2022-05-18 09:58:05 +08:00
    不过话说,频繁使用 Cherry-Pick 的场景是什么呢,Cherry-Pick 对 Git 树是有一定破坏性的。能 Merge 最好还是 Merge 。

    以前公司使用 Cherry-Pick 是因为 test 分支和 master 分支代码差别太大了,不能使用 Merge 。该进行改造,抽取配置文件,但是没人做。项目太大了,也不方便做这些了。
    linuxsteam
        11
    linuxsteam  
    OP
       2022-05-20 21:53:18 +08:00
    @monetto #9 这样会冲突吧
    我们这里用分支当不同客户的版本,会总用 cherry-pick 。不是只有一个生产分支😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5280 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:19 · PVG 17:19 · LAX 02:19 · JFK 05:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.