想要往已经 push 的 commit 追加修改,不想产生新的 commit 的规范做法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
tlerbao
V2EX    git

想要往已经 push 的 commit 追加修改,不想产生新的 commit 的规范做法?

  •  
  •   tlerbao 2020-07-12 18:18:47 +08:00 7867 次点击
    这是一个创建于 1920 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题

    往已经 push 的 commit 里追加修改的比较规范的做饭是怎样的?

    29 条回复    2020-07-13 17:47:10 +08:00
    wfd0807
        1
    wfd0807  
       2020-07-12 18:22:27 +08:00
    实现不规范操作的规范做法? reset header + force push 规范吗?
    sarvatathagata
        2
    sarvatathagata  
       2020-07-12 18:24:12 +08:00
    git commit --amend && git push -f
    xcold
        3
    xcold  
       2020-07-12 18:28:18 +08:00   3
    git commit --amend && git push --force-with-lease
    tinycold
        4
    tinycold  
       2020-07-12 18:39:25 +08:00 via Android
    rebase -i 能合并 commit,但是不知道能不能合并已经 push 了的。
    ryd994
        5
    ryd994  
       2020-07-12 18:45:06 +08:00 via Android
    @tinycold rebase 之后也需要 push -f
    任何修改历史的操作都需要 push -f
    skwfar
        6
    skwfar  
       2020-07-12 19:00:27 +08:00
    rebase 就完事,然后 force push
    lhx2008
        7
    lhx2008  
       2020-07-12 19:05:36 +08:00 via Android   1
    push 了没救了,打 patch 就行,-force 本来就不规范
    SingeeKing
        8
    SingeeKing  
    PRO
       2020-07-12 19:18:28 +08:00
    master / develop 分支:首先直接推到这两个分支本身就已经不规范了(正常情况下应当直接禁止直接 push 的),既然不规范,那么在确保没有别的问题(最好是不要有任何其他协作人,并且自己保证本地没有基于现有提交的分支)的情况下直接 amend commit + force push 吧;如果禁用了 force push,那么就老老实实新增一个 commit 吧

    其他分支( feature / hotfix / release 等):确保没有其他人也在这个分支之上工作就大胆的 amend commit + force push 吧,反正最后 merge 的时候应该也是 sqash 的
    nightwitch
        9
    nightwitch  
       2020-07-12 19:25:19 +08:00
    没有规范做法,修改已经 push 的历史都要 force push
    edk24
        10
    edk24  
       2020-07-12 22:35:44 +08:00
    -f 的, 你的同事很快会过来打断你的狗腿... :)
    himself65
        11
    himself65  
       2020-07-12 23:39:54 +08:00 via iPad
    规范就是不应该直接操作 master 分支……
    yinheli
        12
    yinheli  
       2020-07-13 00:19:03 +08:00
    如果是自己的分支,可以做 rebase, --amend (最近的一次)然后 force push 上去,如果有别人协作的 master 、develop 分支就不行(一般这种也会在服务器端通过 hook 禁止掉)
    Nielsen
        13
    Nielsen  
       2020-07-13 02:08:32 +08:00
    开个玩笑,怎么抢劫才能不犯法……

    没有恶意哈,但毕竟你已经 push 了,再追加修改这就是不对的。当然你如果问一圈同事大家都还没 pull,那你 -f 一下也就当没人知道了。
    xcstream
        14
    xcstream  
       2020-07-13 02:44:42 +08:00
    禁止-f
    msg7086
        15
    msg7086  
       2020-07-13 04:25:33 +08:00   1
    Git 本来也就没有什么规范不规范的。
    各个公司都有自己的规范,你也可以定自己的规范。比如我们做开发,force push 是家常便饭,和我合作的同事都知道怎么正确处理 force push,犯不着把 Git 提供的这么好用的功能给莫名其妙禁掉。当然,如果周围是连 force push 怎么正确处理都不知道的同事,还是保守点比较好。就像我曾经遇到过连开分支都不知道怎么开的同事,结果咱们就只能当 SVN 用了。
    jagger2048
        16
    jagger2048  
       2020-07-13 08:05:38 +08:00
    这边是

    git add -u
    git commit --amend --no-edit
    git push xxx
    noobcoder1
        17
    noobcoder1  
       2020-07-13 11:58:31 +08:00
    直接用 git flow 吧 省的烦
    rrfeng
        18
    rrfeng  
       2020-07-13 12:48:58 +08:00
    不可以。
    上面说的重新提交然后 push --force 实际上还是生成了新的 commit 。答案是绝对不可以。
    lloovve
        19
    lloovve  
       2020-07-13 12:52:49 +08:00 via iPhone
    直接修改提交不行?怕别人觉得自己弱鸡?
    lloovve
        20
    lloovve  
       2020-07-13 12:53:25 +08:00 via iPhone
    谁也不能保证自己的代码没 bug
    msg7086
        21
    msg7086  
       2020-07-13 14:15:31 +08:00
    @rrfeng
    这里我觉得有一定的语言二义性。
    因为楼主说要往 commit 追加修改,那就是 update commit 。
    既然 update 了,那 update 完了的 commit 自然是「新的」。
    楼主的意思应该是不产生多余的 commit 的意思。

    @lloovve
    源代码管理工具的目标是管理源码,而不是为了提交而提交。
    既然是管理,就要有规范。相同功能的修改整合在一起,不同功能或部位的修改拆开。
    不停地追加提交,最后不同功能的更改犬牙交错混在一起,既不方便 Code Review,万一遇到需要回滚功能的时候也没法干净地区分并回滚一小部分提交。
    所以比较专业的 Git 用户都会整理提交记录的。
    cyberocx
        22
    cyberocx  
       2020-07-13 16:28:52 +08:00
    你都要修改之前的 commit 了,还有啥规范不规范的。。
    mxT52CRuqR6o5
        23
    mxT52CRuqR6o5  
       2020-07-13 16:52:54 +08:00 via Android
    都 force 了还有啥规范可言,自己掂量掂量怎么影响最小吧
    est
        24
    est  
       2020-07-13 16:54:58 +08:00
    证明没有测试环境。
    iseki
        25
    iseki  
       2020-07-13 17:01:52 +08:00
    话说,如果推完三分钟内 push -f (估么着没人 pull )是一个不太好的做法吗
    lloovve
        26
    lloovve  
       2020-07-13 17:03:59 +08:00 via iPhone
    代码修改本来就是线性的,怎么整理,也是不能一次改动就完备,git 最大的作用就是记录。大多数时候是分开发分支和稳定分支,说白了,你要做的是分支管理
    1010011010
        27
    1010011010  
       2020-07-13 17:38:44 +08:00
    我觉得要治的是强迫症,人非圣贤孰能无过,你觉得完美的提交在别人看来可能并不完美
    lizytalk
        28
    lizytalk  
       2020-07-13 17:47:01 +08:00
    force push 肯定是需要的,也肯定是不合规范的...
    optional
        29
    optional  
       2020-07-13 17:47:10 +08:00 via iPhone
    @iseki 不要忘了 ci 之类的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5439 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:04 PVG 15:04 LAX 00:04 JFK 03:04
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86