请教一个开发流程中 GIT 解决冲突的问题

205 天前
 sngxx
基准分支是 master ,开发分支是 feature 。现在准备发布上线了,需要 feature 合入 master ,此时有冲突,我解决冲突有两种方式。

一是:直接把 master 合入 feature 解决冲突,再把 feature 合入 master ;
二是:先从 master 拉出分支 master_1 ,把 feature 合入 master_1 解决冲突,再把 master_1 合入 master ;
这 2 种有区别吗,LD 必须让第二种,不理解。
9144 次点击
所在节点    git
121 条回复
hnliuzesen
204 天前
感觉这两种都是在合入 master 时使用 rebase 的情况下有意义,可以保持 master 是一条线
GaGaGood
204 天前
大厂方案:
1. 开发:基于 master 拉 feature
2. 上线:基于 master 拉 release ,合并 feature 到 release ,发布 release 上线
3. 上线后:合并 release 到 master

总结:
1. 开发:feature
2. 上线:release
3. 备份:master
FrankAdler
204 天前
方案 1 就可以了,除了人情世故,上面那些洋洋洒洒一大堆的以为自己很有经验的,求求你们试试 squash merge 吧,所有问题都解决了
cuizibo
204 天前
方案 2 类似 gitflow 的模式吧,master_1 等同于 develop
Laobai
204 天前
你只需要嗯嗯嗯,好好好,然后自己用方法一就行了
HangoX
204 天前
@RightHand 刚想说这个,就是当做 svn 用了
git local 的 master 和 remote 的 master 本来就是两个分支,合并到 master 上是合并到 local 的 master 上其实就是 master1 ,然后在 push 的时候其实是一个 fast forward 。
korvin
204 天前
为什么不把 feature 直接全入 master ,然后解决冲突
mnhkahn
204 天前
1 就行,diff 是关键
zbowen66
204 天前
为什么不是 rebase ?为什么不是 squash merge ?
demonzoo
204 天前
rebase 吧?在你的 feature branch 基于 master branch 操作 rebase
wangyzj
204 天前
你的 dev 和 release 呢
如果非得二选一
应该选择 1
另外,1 是周期性的,并不是上线前
UV
204 天前
我们是会基于 master 分支 checkout 一个带发版日期的版本分支 A 出来, 然后把多个 feature 合并到分支 A ,解决冲突后,发版时再把分支 A 合并到 master 。类似于你说的方法 2 。
Nick66
204 天前
直接在 master 解决 测试没问题再提交代码
rainbowhu
204 天前
feature 与 master 有冲突,说明 feature 版本落后了,要同步下 master 最新代码。
rebase 方式:
```sh
git checkout feature
git pull
git pull --rebase origin master # 更新本地分支,并解决冲突
git push -f # 确保 feature 只有自己使用或着没有别人推代码
#创建 mr ,如果已有 mr ,此时不会再显示冲突。如果过段时间又有冲突,重复此步骤
```

另外还有 merge commit 方式,如果没有 mr 等复杂流程:
```sh
git checkout master
git fetch
git pull
git merge origin/feature # 解决冲突,会产生 1 个 merge commit
git push
```

如果有 mr 流程(与 rebase 方式类似,只是会多 1 个 merge commit)
```sh
git checkout feature
git fetch
git pull
git merge oirgin/master # 解决冲突,会产生 1 个 merge commit
git push
#创建 mr ,如果已有 mr ,此时不会再显示冲突。如果过段时间又有冲突,重复此步骤
```

命令简单写的,不是很精简,理解意思即可
rainbowhu
204 天前
当然还有一些简单的方式
```sh
git checkout feature
git pull --rebase origin master # 解决冲突
git push origin feature:master
```
sir283
204 天前
直接 git push -f ,管它什么冲突,是 lead 叫我 push 的,我只管 push ,出了问题找 lead 。
Livid
204 天前
@Rickkkkkkk 谢谢,38 楼的账号已经被彻底 ban 。
zthxxx
204 天前
月经贴。。。 说等价的是真没理解 parent / diff 方向的问题

在不用 rebase 的情况下,最好的做法都是「不要把 master/dev 等公共分支合到自己的 feat 分支,始终保持 开发分支->公共分支 单向合并」

这个问题在 v2 上已经讨论过好几次了

mark2025
204 天前
尽量避免“直接把 master 合入 feature 解决冲突”
seanzxx
204 天前
在 feature 分支 rebase 呀,然后再 merge 到 master

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

https://ex.noerr.eu.org/t/1116014

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

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

© 2021 V2EX