比如 https://github.com/ArduPilot/ardupilot 这个项目,明确规定只允许 rebase 不许 merge 。
这是一个好习惯吗?
比如 https://github.com/ArduPilot/ardupilot 这个项目,明确规定只允许 rebase 不许 merge 。
这是一个好习惯吗?
|
murmurNov 28, 2024
1
rebase 做出来的树一条直线,贼 tm 漂亮,我以前做过有的项目就是用 rebase
|
|
RightHandNov 28, 2024 via Android
2
当成 svn 来用呗
|
|
kera0aNov 28, 2024 via iPhone
3
无所谓吧,merge 和 rebase 合并其实没本质上的区别
|
|
000siteregNov 28, 2024
4
我是能 rebase 就不 merge 。rebase 的时候有冲突就处理。从常理理解,别人先提交,log 中就在我之前,一条直线很好理解。
|
|
Wxh16144Nov 28, 2024
5
无所谓 +1, 两个都做到会用,严于律己即可,别人如何规定就遵循他的规则罢了
|
|
malusamaNov 28, 2024
6
没什么差别啊, 而且 rebase 漂亮多了
|
|
zsc8917zscNov 28, 2024
7
rebase 有代码覆盖的风险啊~
|
|
GeruzoniAnsasuNov 28, 2024
8
这么说,rebase 之于 merge 约等于 golang 之于 c++
|
|
donaldturingleeNov 28, 2024
9
merge 的话用 git log graph 有时候脑一抽不容易看得清楚...
|
|
zealot0630Nov 28, 2024 via Android
10
当你需要 bisect 时候,就知道好处了
|
|
11
一般用 rebase,用不了的时候采用 merge 。不能用 rebase 的原因有:
1. 分支不是私有的,已经被多人 checkout 或者 branch,rebase 会对合作者的工作流造成破坏 2. 需要保留原始提交的时间轨迹,例如分支发布过版本 3. commit 带 gpg 签名,rebase 毫无疑问会破坏签名 4. 分支差异过大,rebase 过程会大量 conflict svn 和 git 的根本性区别是集中式 vs 分布式,只是因为 git 的 branch 成本低所以能玩得转频繁分支的工作流 |
|
wysnxzmNov 28, 2024
12
回滚找不到节点的时候就老实了
|
|
virusdefenderNov 28, 2024
13
我一般 rebase master 之后再 merge
|
|
sercoNov 28, 2024
14
从前也是 rebase ,后面遇到几次莫名代码丢了就不这么干了
|
|
julyclydeNov 28, 2024
16
@zsc8917zsc 为什么会覆盖?
|
|
17
准确地说是只允许 fast forward 的 merge ,即需要合并的分支基于目标分支的最新版本,如果不是的话就需要 rebase 到最新版本再 merge 。
除了历史看着「干净」之外,我觉得最大的好处是在 rebase 之后、merge 之前,你还有机会检查你的代码、运行测试(其他人也可以在 PR 上继续 review 、CI 也会重新运行)。而在 GitHub 上直接点 merge 的话改动就直接被合并到目标分支,没有就会再检查了(当然你可以在本地 merge 并检查)。 很多时候即使 merge 没有冲突,代码也可能会跑不起来。 |
|
wen20Nov 28, 2024
18
|
|
wen20Nov 28, 2024
19
公共分支 rebase 如同沙滩拉屎,个人很方便, 然而别的伙伴需要避免踩屎。
|
|
yooomuNov 28, 2024
20
通常 feat branch 会使用 rebase ,但是往 master 合并代码时使用 merge ,这样链路非常清晰
|
|
Rache1Nov 28, 2024
21
|
|
newtype0092Nov 28, 2024
22
@wen20 和 rebase 比起来,merge 才更像拉屎,大家都可以方便的在空地来一坨,最后这个“雷区”会越来越大。
只能 rebase 是要求主分支迭代时严格的链式结构管理,说白了就是让并发开发的人通过额外的工作来保证 feature 被串行的 merge ,但对于其他读者,但串行的版本链肯定比并行的版本树清晰易懂的多。 |
|
chatgptnextNov 28, 2024
23
来一次线上事故就老实了😋
|
|
ensonmjNov 28, 2024 via iPhone
24
squash 再 rebase ,清晰
|
|
crysislinuxNov 28, 2024 via Android
25
你自己的开发分支在有其他人参与之前随便 rebase 还是 merge 。有人参与之后就只 merge ,最后合并到 main 的时候 squash merge 清理一下。
|
|
mayliNov 29, 2024
26
没太大区别…repo 制定了就遵守就好了
|
|
tagsNov 29, 2024
27
如果是明显的特性分支合并就用 merge ,保留时间线。如果是独立的提交就用 rebase ,基于最新做改动。
|
|
whyrookieNov 29, 2024
28
我一个人的项目,有时候可能有多个分支一同开发,通常先 rebase 再回到主分支进行 merge
|
|
twelvechenNov 29, 2024 via iPhone
29
我们组的项目不允许使用普通 pull ,merge 必须使用 fast-forward ,也就是有冲突必须 rebase 。目前没遇到什么问题,体验良好。
|