请教 cherry-pick 冲突的原因

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

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

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

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

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

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

以前公司使用 Cherry-Pick 是因为 test 分支和 master 分支代码差别太大了,不能使用 Merge 。该进行改造,抽取配置文件,但是没人做。项目太大了,也不方便做这些了。
linuxsteam
2022-05-20 21:53:18 +08:00
@monetto #9 这样会冲突吧
我们这里用分支当不同客户的版本,会总用 cherry-pick 。不是只有一个生产分支😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/853018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX