git 小白代码合并问题请教

2022-10-11 15:16:11 +08:00
 haha88
各位大佬,请教一个 git 合并问题?
现有分支两个,dev 对应开发测试环境、master 对应线上环境。
4 人的 java 小组,如果我在 dev 上完成了一个模块的开发,测试验证没问题后,怎么省事一点合并到 master 上?
我用了两种合并方式,感觉都不是很方便:
1.手动复制这次改动的代码到 master 上对应的 java 类,然后 commit (合并到 master 会复制很多)
2.用 git cherry-pick 把涉及到的 commit 挪过来(我想怎么把 dev 上多次的 commit 压缩成一个)
2.1 本地建个临时分支,在临时分支上将多个模块 A 的 commit 压缩成 1 个
git checkout -b <new_branch_name> <commid_id>
git checkout -b testdev 107b726 (模块 A 的最后一次的 commit )
git rebase -i HEAD~一个数
然后得到一个压缩后的 commit_id
2.2 在 master 上执行
git cherry-pick 03ef1d5 临时分支上的 commit_id
第 2 种方式用了之后,如果前一个 commit 和之后的 commit 有重叠修改的文件,经常会发生冲突。
大家又什么合并方法推荐吗?
3325 次点击
所在节点    git
31 条回复
weyou
2022-10-11 22:36:42 +08:00
@zhuweiyou 这种做法,dev 分支岂不是会被整的很乱, 而且很可能和 main 不一致, 测试环境都不一致, 测试的结果还可信么?
yeqizhang
2022-10-11 22:45:12 +08:00
git merge 没用直接跳到 git cherry-pick 了?🐶
1 那种手动搬代码的想法简直就离谱,相同的内容在不同分支上两个提交点
yeqizhang
2022-10-11 22:48:56 +08:00
@weyou 他这个一看就很有问题,完了要上线大家再往 master 合并又要解决冲突之类的吗,搞出问题了也不知道……17 楼 soupu626 的这个流程才对
CEBBCAT
2022-10-12 00:39:39 +08:00
我是用的 2 的方式,但有一些细微不同,我是直接全部 cp 到 master ,然后 rebase 合并的。

> 第 2 种方式用了之后,如果前一个 commit 和之后的 commit 有重叠修改的文件,经常会发生冲突。
你仔细看一下 git log ,用树形视图。自己写的代码之间一般是不会有冲突的。除非你这些 commit 不是一脉相承的,或者你这些 commit 所涉及到的文件,别人也有改动。
simonlu9
2022-10-12 10:32:51 +08:00
目前团队采用这种方式,我觉得适合大部分小团队,而且用了一段时间,非常好用
https://github.com/xiaolyuh/mrtf-git-flow-4idea
seth19960929
2022-10-12 10:35:12 +08:00
@yeqizhang 17L 是标准的 gitflow, 是很好的标准, 但是很多人没用, 原因之一就是太复杂了.
试过用 sourcetree 自带的 gitflow 图形化操作, 很不错就是太慢了.

实际上我还是喜欢简单的
master, dev, feature 就差不多. 每次从 master 拉出 feature, 开发中不断提交到远程, 测试合并到 dev, 测试完成把 feature 合并到 master, 删除分支. 此次功能完成.

冲突这个问题什么工作流都解决不了的, 而是写代码的人去处理.
waterlaw
2022-10-12 12:29:40 +08:00
参考下我的 https://www.waterlaw.top/articles/57

上线时从 master 拉出一个 release 分支,merge 你的 dev 分支,上线后再把 release 同步回 master (即从 master 拉出分支 merge release, 后合并)
waterlaw
2022-10-12 12:30:26 +08:00
这里的 dev 分支是你这边的,我那博客叫 feat 分支
SoloCompany
2022-10-12 20:11:45 +08:00
不需要历史的话就用 merge —squash
yeqizhang
2022-10-13 00:13:07 +08:00
@seth19960929 合并到 dev 解决的冲突,然后测试通过了,再合并到 master 又有冲突了,那这次冲突又没经过测试,这样能行吗
seth19960929
2022-10-13 13:54:29 +08:00
@yeqizhang of course, 只要确保你的每一次提交的代码测试过. 冲突和测试没有关联关系.

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

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

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

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

© 2021 V2EX