






















这是一个创建于 512 天前的主题,其中的信息可能已经有所发展或是发生改变。
用了二周开发了一个需求, 提交了 200 多个 commit, 到主分支的时候. 被告知太不专业了. 为什么不 rebase 一下再上传.
我试着 Rebase 了一下 master, 各种冲突解决的要命, 所以问问大家. 你们合代码看重 rebase 么?
1 hetal 2024 年 12 月 7 日我们只允许 git merge ,不允许 git rebase~~~ |
2 FlashEcho 2024 年 12 月 7 日rebase 之后 git 历史看上去更线性一点,更好看,你不 rebase 的话,唯一的好处就是多保留一点点从哪分叉出来的历史记录,但是这个历史记录也没啥用,而且 git 记录会很丑 而且 200 多个 commit 也太吓人了,建议还是先 squash 一下,不然你解决冲突要一个个解决,会更不好处理冲突 |
3 k9982874 2024 年 12 月 7 日 via Android2 周? 200 多个 cimmit ?你需要拆分需求缩小提交粒度 |
4 kera0a 2024 年 12 月 7 日 via iPhonerebase 和 merge 解决的冲突不是一样的么? |
5 liangdi 2024 年 12 月 7 日 via Android我觉得还是要看一下你的 log |
6 nightwitch 2024 年 12 月 7 日你往主分支合并的时候不是应该压缩成 1 个 commit 再提 pr 么。 |
9 hanxu317138OP master 的冲突已经解决完了. 可以直接 Merge 的~~但是要 rebase 就很痛苦 |
10 povsister 2024 年 12 月 7 日 via iPhone你如果 rebase 会冲突 那合并一样会冲突,这有什么好吐槽的? 另外如果谁两周做一个需求合并主分支 200 多个提交,容我先找把扫把你就在这不要走动,搁保洁阿姨都知道倒垃圾是倒一次还是倒两百多次。 |
11 fang2hou 2024 年 12 月 7 日如果不 squash merge 的话,在 commit merge 强烈推荐 rebase 。 不过话说回来,除非 200 个 commit 都是独立的模块化改动,否则 200 多个 commit 加入主 branch 说实话意义不大。 |
12 zeromake 2024 年 12 月 7 日倒是可以把自己本地的分支变更全部压成一个 commit ,但是这样就和之前的开发分支冲突了……,如果你之前已经合并到开发服里就爽到了…… |
13 hanxu317138OP @povsister 对一个非常大的历史代码, 进行重构处理. 2600+行的代码. 二周压缩到 800 行内. 中间多次 commit |
14 qxooqx 2024 年 12 月 7 日 via Android1.在第 290 个提交上创建一个新分分支防止操作失误 |
15 hetal 2024 年 12 月 7 日一般超过 1 周的开发,就应该拉单独的分支了 |
16 jiangshanmeta 2024 年 12 月 7 日rebase 后整整齐齐,避免出现 merge xxx into xxx |
17 povsister 2024 年 12 月 7 日 via iPhone@hanxu317138 鉴于你现在情况,直接 squash commits 到一个然后 rebase 吧,反正都这样了,你大概也没拆语义化提交 |
18 aliipay 2024 年 12 月 7 日这么多问号感觉是在质问别人,感受不是很好 |
19 dcsuibian 2024 年 12 月 7 日有一种观点认为,仓库的提交历史即是 记录实际发生过什么。 它是针对历史的文档,本身就有价值,不能乱改。 从这个角度看来,改变提交历史是一种亵渎,你使用 谎言 掩盖了实际发生过的事情。 如果由合并产生的提交历史是一团糟怎么办? 既然事实就是如此,那么这些痕迹就应该被保留下来,让后人能够查阅。 另一种观点则正好相反,他们认为提交历史是 项目过程中发生的事。 没人会出版一本书的第一版草稿,软件维护手册也是需要反复修订才能方便使用。 持这一观点的人会使用 rebase 及 filter-branch 等工具来编写故事,怎么方便后来的读者就怎么写。 总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。 以上内容来自《 pro git 》,个人更赞同第一种观点。所以我比较讨厌 rebase 。 我比较喜欢用 git merge --no-ff --no-commit |
20 IvanLi127 2024 年 12 月 7 日rebase 很重要,自己分支的代码要尽快 rebase 开发主干分支,避免落后太多导致最后要合入主干时一直在解决冲突。你这 200 多太要命了。 |
21 povsister 2024 年 12 月 7 日 via iPhone@dcsuibian |
22 otakustay 2024 年 12 月 7 日如果你 200 多个 commit 做的是一个事,本地先 squash 以后,再 rebase 一次,再 push 就好了啊 |
24 jqtmviyu 2024 年 12 月 7 日我喜欢 rebase, 有时间上的线性. |
25 unco020511 2024 年 12 月 7 日 via Android我觉得你这个场景的分歧是「 feaure 」分支往 dev 合并时,是否需要 squash 。并不是 MR 之前功能分支要不要 rebase 主干,有啥区别?如果主干和你有冲突,那你的 MR 本来就合并不了,你的 MR 能合并,就说明不存在冲突,那么你在提 mr 之前 rebase 了主干,对于主干来说,没有任何区别呀 |
26 11232as 2024 年 12 月 7 日rebase 相当于将你的代码从原来老版本的主干迁移到最新的主干,解决代码冲突的同时,也能发现和解决在你开发的这两周里与已提交到主干的代码的业务冲突。 |
27 bingoso 2024 年 12 月 7 日 via Android我用 git 管理笔记,两周都做不到 200 个提交。你这提交太多了 |
28 StephenHe 2024 年 12 月 7 日rebase 也好,merge 也好,都是为了把主分支内容同步到自己分支。楼主的问题是太长时间不同步代码导致了很多冲突。 |
29 StephenHe 2024 年 12 月 7 日test ,master 向子分支 rebase ,子分支向 test ,master 只通过 merge ,让时间线看起来是一个正向操作。 |
31 GBdG6clg2Jy17ua5 2024 年 12 月 7 日1.你是如何做到 2 周 commit 200 多次的? |
32 c0t 2024 年 12 月 7 日才 2600 行就 200 次感觉 commit 里都是无效信息…写了点就 commit ?中间可能压根就没法用吧?喜欢这么用的话就用 branchless 的方法,detach 然后准备合并再 squash |
33 c0t 2024 年 12 月 7 日git branchless 这样的工具应该就是给你现在这种用法设计的 |
34 XiLemon 2024 年 12 月 7 日比较好的做法是在开发过程中,每次开发前和每次 commit 后都 rebase 一下 master 分支。最后提交合并的时候,可以将开发分支的 commit log 进行合理的 squash 。 |
35 thevita 2024 年 12 月 7 日我的习惯,如果预期自己本地的分支会持续很长时间不能合并的话,此时应该考虑 1. 看能不能拆成多个 提交分批合并, 对 review 的人也友好点 |
36 gesse 2024 年 12 月 7 日其实我想说,OP 提交两百个 commit 到 master/main ,已经不是 rebase 和 merge 的事情了。 |
37 lrh3321 2024 年 12 月 7 日如果你 200 多个 commit 都对应 1 个 Feature 的话,应该先把提交合并了。rebase 的时候就没那么痛苦了。 |
38 hanxu317138OP 最新进展~~~把 rebase 搞了一下. 成功回到了 1 个 commit,同步到最新的功能. |
40 rrubick 2024 年 12 月 7 日 via iPhone@nightwitch #6 |
42 goldenAndGreen 2024 年 12 月 7 日我们强制要求 squash,想想看万一有一个搞出一个 bug 需要 revert ,如果后续还有别人的提交,那简直灾难 |
43 newtype0092 2024 年 12 月 7 日啥需求需要 200 个 commit ?你纯把 commit 当历史记录用呗? |
44 Vegetable 2024 年 12 月 7 日那是你没搞明白,确实很不专业。如果你是基于 master 分支开发,且能直接 merge ,rebase 是不应该有冲突的。 |
45 jeesk 2024 年 12 月 7 日啥叫 rebase ? 一个 dev 分支为什么要 rebase master ? 这点搞明白没? 而为什么 master 要 merge dev 分支? chromium 项目为什么在分支持合并代码都是 merge , 而开发分支都是 rebase master ? 学习大型项目的管理办法, 比听阿猫阿狗的,进步太快了。 |
46 NarutoAsh 2024 年 12 月 7 日 via iPhone一看就是 git 都用不明白的人…… |
47 DefoliationM 2024 年 12 月 7 日看中,连 rebase 都不会用,太不专业了,你自己看着乱七八糟的 commit 历史不难受吗,稍微有点代码规范的公司都不会让你随便写 commit 历史的。 |
48 memorycancel 2024 年 12 月 8 日有 2 个问题: 你需要: |
49 finian 2024 年 12 月 8 日你这种情况就别 rebase 了,搞不好会丢改动。先抛开最佳实践问题不谈,你现在其实可以: ``` 将你的所有改动 merge 到 master ,但先不做 commit ,解决冲突(不管 merge 还是 rebase ,该解决的冲突逃不掉),然后 commit 成一个新的特性分支,再接着往下走流程。现在你的改动就只有一个 commit 了(不谈规范和最佳实践问题),然后按你团队的规范,该 merge merge ,该 rebase rebase |
50 msg7086 2024 年 12 月 8 日先 squash 再 rebase 再 merge 就行。 |
51 msg7086 2024 年 12 月 8 日@dcsuibian #19 记录实际发生过什么这个也是有粒度的。严格来讲,每一次输入删除都是一次更改,但你肯定不会觉得每打一个单词都要提交吧。那么到底打多少个单词才需要提交一次呢,删了多少代码才需要提交一次呢。这个粒度把控,不同的人也有不同的观点的。 |
52 msg7086 2024 年 12 月 8 日(续) |
53 wnpllrzodiac 2024 年 12 月 8 日 via Androidb 站一个视频,让 rebase 变重要了。没强迫症,感觉还好吧。就是 git 🌲有点乱。好的分支管理还是重要多了 |
55 jzphx 2024 年 12 月 8 日直接在自己分支 rebase ,然后基于 master 拉取新特性分支,将 rebase 完的一个 commit cherry pick 到特性分支,解决完冲突之后重新填 commit 信息,然后 push 提交 mr 。稍微有点繁琐,但是管用 |
56 leconio 2024 年 12 月 8 日 via iPhone调试舔 ci 脚本时候,没 rebase 简直灾难 |
57 passon 2024 年 12 月 8 日有段时间挺喜欢用 rebase 的 |
58 kidlj 2024 年 12 月 8 日这里 rebase 的意思是你把 200 个 commits rebase/squash 成一个 commit ,再 rebase/merge 到主分支。 参考:rebase -i |
60 leonshaw 2024 年 12 月 8 日 via Android进永久性分支的一个基本原则是每个 commit 都自洽(能编译运行)。 |
61 povvoq 2024 年 12 月 8 日说实话你做了一个功能,留了 200 多个 commit |
62 wu67 2024 年 12 月 8 日你可以不用, 但是不能没有 |
63 zpf124 2024 年 12 月 8 日我的观点 我不喜欢用 rebase 来合并分支,尤其是合并到 dev 和 master 这种关键节点,对于是否--no-fast-forward 我都可以接受,但拉取时还有从 dev 合并最新更新到我的分支时我还是会优先考虑 rebase 的。 因为很多时候你从什么位置 fork 以及你从远程分支拉取最新前有提交都是无关紧要信息。 比如: 2 、善用 rebase -i ( squash / fixup ),尤其是 push 和合并到主要分支前,将零碎杂乱的无用提交都整合。 开发时 commit 提交无所谓毕竟 statsh 确实用着让人不安心,把 commit 但保存无所谓,但合并前最好将提交整理一下,尽量按功能模块让每个 commit 包含一小部分完整功能,没人关心你写一半的代码代码和之前有什么差异。 而你这 200 多个提交确实有点太多了.... 当然如果每个提交都有前后对比的价值那确实不应该合并。 比如: 在这两种提交线路图里我更倾向于用最后 push 那个 rebase 修改过的第二种,你开发 A 功能中间自己思考草稿时的增删改对最终成品意义不大。 --------- |
65 zpf124 2024 年 12 月 8 日第一个示意图勘误, 排版没搞好折行了。 dev-> dev+a -> dev+a+c -> dev +a+c+b 或 ( dev merge(a + b)+c ) |
66 xylxAdai 2024 年 12 月 8 日几百个的话还是推荐 rebase 一下。确实直接 mr 会扰乱 timeline |
67 xiaokangz 2024 年 12 月 8 日 via iPhone确实不妥,一个需求 200 个 commit 对后面查看变更历史时会造成很大的困扰。更好的做法是在 merge 回主分支之前将对 master 做 rebase 并将所有 commits squash 为一个 commit 。 注重 Git 提交历史本身就是一种专业的态度 |
68 devfeng 2024 年 12 月 8 日自己的分支用 rebase -i ,处理一些方案变动导致的反复,合进主分支或多人协作的需求分支,用 merge |
69 tcper 2024 年 12 月 8 日2 周工作日是 10 天,200 多个 commit ,平均一天 20 个 commit 。 你这一天 20 个 commit ,用 rebase 还是 merge 区别都不大了吧? 一天算你干 10 小时,半小时 commit 一次? |
71 Edsie 2024 年 12 月 8 日请使用 rebase - i 并使用 squash 将你那 200 多个 commit 整理好,不会有人想在 master 上看到你这么多 commit |
72 U2Fsd 2024 年 12 月 8 日git 都用不明白的小白,为什么要网暴自己? |
73 dcsuibian 2024 年 12 月 8 日@msg7086 你这个是工作流和提交的历史粒度的问题。 我没有把他当成史书来写,只是我觉得提交历史的整理不应以“模糊真实变更”为代价,过于简化的历史可能反而增加复杂性。 具体到你的场景,如果是我的话,我会创建一个中间分支,比如`dev`吧,将个人分支合并上去的时候用`merge --no-ff`,这样这个分支上看起来就只前进了一个提交。 当然具体选择什么样的工作流随你,你觉得什么样的工作流适合你都行。我只是说我比较喜欢`merge`。 至于什么时候提交: 我的观点是一个提交实现一个逻辑单元: 每次提交都应对应一个独立且完整的逻辑改动,例如: - 实现一个功能。 |
74 est 2024 年 12 月 8 日我试着 Rebase 了一下 master, 各种冲突解决的要命 如果你不 rebase 就没冲突了??? |
75 idragonet 2024 年 12 月 8 日我 4 年都没 200 多个 commit 。 |
77 YienX 2024 年 12 月 9 日@hanxu317138 #7 先压缩,再 rebase ,或者直接使用 merge ,不过我都建议先压缩成一个 commit ,也看你们公司的规定了,你合并到主分支的时候,肯定会有冲突,这些冲突肯定是要在你本地开发分支解决了才能合并到主分支的。 |
78 cnhongwei 2024 年 12 月 9 日哈哈,楼主被喷了。我来支持一下,我就喜欢 merge ,而不喜欢 rebase ,就喜欢看一棵大树。 |
80 zhengwenk 2024 年 12 月 9 日200 个提交,想想都不敢想,master 一下就被淹没了。 |
81 changz 2024 年 12 月 9 日小分支 rebase 上游不是基操吗 |
82 rb6221 2024 年 12 月 9 日2 周 200 个=1 周 100 个=1 天 20 个,假如是 10 小时工作,那就是半小时一个,你真闲啊。。。 |
83 guanzhangzhang 2024 年 12 月 9 日自己一个分支上 rebase 后再提 merge 阿,主干更新太频繁,你自己本地分支太老就要 |
85 LanLiang 2024 年 12 月 10 日先将自己的 commit 压缩成一个或几个有效的 commit, 然后 rebase 主分支, 最终效果是 PR 里面只会有一个或几个有效的 commit |
86 94 2024 年 12 月 10 日反正我看一个人会不会用 git ,就看他是怎么理解和使用 rebase 的。你说 rebase 重不重要……很明显能区分出来是不是熟练运用 git |
87 jackleeforce3615 2024 年 12 月 10 日你自己先要把 200 个 commit squash 到一个 然后在 rebase 了再 push 啊 |
88 rink9oled3 2024 年 12 月 10 日 via iPhone@chesha1 果然我看《 loki 》 没理解错,tva 就是强制不断 rebase ,为了线性神圣时间线,不断删剪分叉和所谓不合理的代码变体。哈哈哈🤣 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。