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 · 7345 次点击
    这是一个创建于 1593 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题

    往已经 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  
       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   ·   实用小工具   ·   1923 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:18 · PVG 00:18 · LAX 08:18 · JFK 11:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.