gowl
V2EX  ›  问与答

使用 git 的时候,大家喜欢用很多小 commit 还是用很少的大 commit?

  •  
  •   gowl · Feb 21, 2023 · 4135 views
    This topic created in 1169 days ago, the information mentioned may be changed or developed.

    我自己喜欢用很多细小的 commit ,但我注意到一些天才型的工程师喜欢用大 commit:)

    36 replies    2023-02-22 11:30:55 +08:00
    wangkun025
        1
    wangkun025  
       Feb 21, 2023   ❤️ 2
    也许,他们是合并过的 commit
    ql562482472
        2
    ql562482472  
       Feb 21, 2023   ❤️ 2
    squash !
    dzdh
        3
    dzdh  
       Feb 21, 2023   ❤️ 1
    我习惯切个新分支,在这个分支上很多小 commit ,然后切成一个大 commit 重新切个分支然后在 merge 到主干分支。
    gowl
        4
    gowl  
    OP
       Feb 21, 2023
    追一个问题:如果是自己的项目,有必要以丢失信息为代价去 squash 么?
    gowl
        5
    gowl  
    OP
       Feb 21, 2023
    @dzdh 你会保留所有的“试验性”分支么?
    silentsky
        6
    silentsky  
       Feb 21, 2023 via Android   ❤️ 1
    我喜欢大 commit ,一般都是一个需求一个 commit
    renmu
        7
    renmu  
       Feb 21, 2023 via Android   ❤️ 1
    我一般都是下班前一个 commit (笑
    silentsky
        8
    silentsky  
       Feb 21, 2023 via Android   ❤️ 1
    搞那么多 commit ,冲突合并都费劲
    zjp
        9
    zjp  
       Feb 21, 2023 via Android   ❤️ 1
    开发分支完成一版就提交,还会有一些小修复的提交
    合并主干时用 squash ,基本一个需求一个提交
    typing
        10
    typing  
       Feb 22, 2023 via iPhone   ❤️ 1
    随心所欲 commit 。我一般把 commit 当“保存”用。

    但 PR 之前:fixup 所有临时 commit ,reset ,add -p ,以基本逻辑为单位 commit ,写正经的 commit message
    biabia123456
        11
    biabia123456  
       Feb 22, 2023
    @typing #10 你可以试试 rebase 没必要 reset 万一操作失误就尴尬了
    lslqtz
        12
    lslqtz  
       Feb 22, 2023
    分支上小 commit, 最后整合成大 commit 合并到主线
    darkengine
        13
    darkengine  
       Feb 22, 2023
    @silentsky 大 commit 处理冲突才是噩梦
    IvanLi127
        14
    IvanLi127  
       Feb 22, 2023 via Android
    用小的,当然也不会太小,大概一个功能点一个。
    前段时间喜欢把几个合成一组组比较独立的功能块,不过现在都 mr 到主干,也懒得再合了。。
    我感觉人不是很多的情况下细点就细点。大的 commit ,回撤还麻烦
    IvanLi127
        15
    IvanLi127  
       Feb 22, 2023 via Android
    @silentsky 反对,如果 commit 多会导致合并时一直冲突,那是项目设计有问题,任务分配也有问题,技术和非技术上都有问题才会这样。
    silentsky
        16
    silentsky  
       Feb 22, 2023 via Android
    @IvanLi127 我指的是 rebase
    hst001
        17
    hst001  
       Feb 22, 2023   ❤️ 1
    大小都有,看情况,原则是如果要对 commit 执行 git revert 时尽量安全,或者影响尽可能少
    hackpro
        18
    hackpro  
       Feb 22, 2023 via iPhone
    @typing #10 问个弱智的问题
    已经 commit 的 lig history 还能修改吗?
    msg7086
        19
    msg7086  
       Feb 22, 2023
    「有必要以丢失信息为代价去 squash 么」

    丢失信息要看丢失的是有效信息还是无效信息。
    比如你做一个网页表单,每加一个文本框就提交一次,一个页面 20 个框交了 20 个 commit ,这就是无效信息。这种 squash 了一点都不心疼。
    但是如果你做一个功能,要改数据库结构要改页面,那你数据库结构交一次,页面交一次,就很合适。
    msg7086
        20
    msg7086  
       Feb 22, 2023
    @hackpro Git 你可以当作一个数据库,里面任何一个东西都可以修改(除了 hash 和签名,这个是算出来的)。
    yikyo
        21
    yikyo  
       Feb 22, 2023 via iPhone   ❤️ 1
    一定是小的,代码有问题需要排查回滚定位,用 git 二分查哪次递交的问题,你用大 commit 就做不来

    大 commit 合到主分支的这种情况不算
    zhenjiachen
        22
    zhenjiachen  
       Feb 22, 2023 via iPhone
    同意用 mr 后 squash 成为一个大的 commit ,使用 mr 的合并并且 squash ,squash 后还可以在 mr 中看到一个个小的 commit 。这样主分支很清爽,也能通过 commit 看到是哪个 mr 的提交
    billzhuang
        23
    billzhuang  
       Feb 22, 2023 via iPhone   ❤️ 1
    小步 commit ,merge 时 squash 。

    一个 feature 一个 commit ,要不然就拆 feature 。
    IvanLi127
        24
    IvanLi127  
       Feb 22, 2023 via Android
    @silentsky rebase 会这样就不合理啊,除非做的比较低层,性能要求不足以很好地让源代码工程化,不然不至于疯狂冲突
    charlie21
        25
    charlie21  
       Feb 22, 2023   ❤️ 1
    有一些 commit 是做在 git repo 里,有一些 commit 是做在自己心里

    如果是为了给别人看到,只在 “专门邀功请赏” 色彩的地方做 commit 。之前在自己心里的 commit 直接写在纯私人工作日志里了

    -

    哈哈。工作日志是啥?就是上一次能 1 小时解决问题这一次用 1 分钟能解决的原因和背后的秘密的所在 / 保存的地方
    julyclyde
        26
    julyclyde  
       Feb 22, 2023
    phabricator
    就是会把多个 commit 合并为一个,再增加上它自己的附属信息,然后再合并给主分支

    在小分支上的多个 commit 的历史其实就只能去网页(其实是另一个单独保存 review 的 repo )上看了
    dengji85
        27
    dengji85  
       Feb 22, 2023
    学到了,我一直头疼主分支提交记录太乱了了
    superliy
        28
    superliy  
       Feb 22, 2023
    我刚入行的时候带我的大姐姐说过,详细的 commit 能让领导知道你在做事
    yogogo
        29
    yogogo  
       Feb 22, 2023
    我只要修改就提 commit ,生怕老板不知道我在做事
    wlfeng
        30
    wlfeng  
       Feb 22, 2023
    开发分支写完一个功能 commit 一次,累计一堆再提交,万一哪天代码丢了或者盘坏了哭都哭不出来;整体需求开发完成后再合并到生产分支;
    zhchyu999
        31
    zhchyu999  
       Feb 22, 2023
    小 commit 快跑
    另外谁后合并谁尴尬
    FinnBai
        32
    FinnBai  
       Feb 22, 2023   ❤️ 2
    提交尽量保证原子性原则,也就是一次提交是尽可能少量且不可分割的整体。好处就是 code review 更加简单,代码更容易回滚,更易于追踪变化等等。——《 Pro Git 》
    合入主干可以用 squash ,这样能够保证主干 commits 信息更加清晰,有利于项目整体性进度追踪。
    Liam1997
        33
    Liam1997  
       Feb 22, 2023
    我一般是一个新的 feature 新建一个分支,为了防止后续合并解决冲突麻烦,中途会暂时 commit 一次,然后 rebase 一下最新的主分支,再 reset 一下,最后一个 feature 一个大的 commit 提交。

    如果是 bugfix 当然就是小 commit 了。
    nekoneko
        34
    nekoneko  
       Feb 22, 2023
    feature 分支多个小 commit, 合并前合成一个大 commit.
    dev 分支和 master 分支随时提交小 commit
    xiaonizi
        35
    xiaonizi  
       Feb 22, 2023 via Android
    自从上次看到运维统计月度 commit 量的截图后,我尽量分多次 commit😬
    RICKEYGONG
        36
    RICKEYGONG  
       Feb 22, 2023
    下班前必 commit
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1029 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 85ms · UTC 23:34 · PVG 07:34 · LAX 16:34 · JFK 19:34
    ♥ Do have faith in what you're doing.