• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zjsxwc
V2EX  ›  程序员

git 如何把某次 commit 抹掉?

  •  
  •   zjsxwc ·
    zjsxwc · Mar 16, 2018 · 9752 views
    This topic created in 3159 days ago, the information mentioned may be changed or developed.

    有同事在一次本地 commit 里把极光推送的 secret 传上去了,然后他又 commit 一次把这个 commit 给覆盖掉,但通过gitk filename仍旧可以看到他的那次提交的 secret。

    然而不幸的是,上周已经把他的分支合并到了线上分支。

    我们应该如何把他带有 secret 的提交抹去?

    Supplement 1  ·  Mar 16, 2018
    结贴, 还是换 secret 代价最小也最简单
    41 replies  •  2018-03-23 10:01:06 +08:00
    blakejia
    blakejia
    Mar 16, 2018❤️1
    1
    更换 secret 更实在
    ycz0926
    ycz0926
    Mar 16, 2018 via iPhone
    2
    把代码删了,重新初始化仓库😊
    pagxir
    pagxir
    Mar 16, 2018 via Android
    3
    直接删库跑路。
    leviathan0992
    leviathan0992
    Mar 16, 2018
    4
    强制回滚
    arclin16
    arclin16
    Mar 16, 2018
    5
    reset 到提交 secret 之前的节点吧 然后重新 commit...
    scnace
    scnace
    Mar 16, 2018 via Android
    6
    rebase -i ? 还有这种 key 不是应该做成 conf 的形式吗?
    vegito2002
    vegito2002
    Mar 16, 2018
    8
    reset 不行吗? gitk 没用过不知道难道是有什么特殊的功能;
    SEARCHINGFREE
    SEARCHINGFREE
    Mar 16, 2018
    9
    #1 +1
    secret 都暴露了吧
    dahvlh
    dahvlh
    Mar 16, 2018
    11
    reset 然后 push -f 吧
    timwei
    timwei
    Mar 16, 2018
    12
    #先记录暴露的 commit 的 hash、当前版本的 hash
    git log

    #回到旧版本
    git checkout 旧版本 hash

    #创建回滚用分支
    git checkout -b 回滚用的分支

    #套用回滚版本到当前版本中间的修改
    git checkout 当前版本 hash .

    #移除暴露的档案后 git push -f 到 repo, 记得把 repo 的 force 保护关掉
    lllllllllllllll
    lllllllllllllll
    Mar 16, 2018❤️2
    13
    backup current files.
    git reset --hard <your commit hash>
    git push origin master -f

    use your backup overwrite current files
    commit and push
    timwei
    timwei
    Mar 16, 2018
    14
    虽然我也觉得直接换 secret 会好点
    uolcano
    uolcano
    Mar 16, 2018 via Android
    15
    @scnace rebase 后其实还是能通过 reflog 看到这次操作的,不过被回滚的内容就不知道能不能再恢复回来,我还没试过恢复
    wwulfric
    wwulfric
    Mar 16, 2018
    16
    1. 作为分布式代码控制,你不能保证其他人电脑上没有备份
    2. git rebase -i,然后在你要删除的 commit 那里把 pick 换成 drop,然后强推,至少服务器记录里可以删掉
    3. 最好的方式是换 secret 吧
    ZxBing0066
    ZxBing0066
    Mar 16, 2018❤️1
    17
    reset 后 push --force 然而已经上线了不排除已经泄露的可能,还是换 secret 实在
    scnace
    scnace
    Mar 16, 2018 via Android
    18
    @uolcano drop 也能看到吗?没用 reflog 试过来着……
    ex44559
    ex44559
    Mar 16, 2018
    19
    git rebase
    closedevice
    closedevice
    Mar 16, 2018
    20
    @vegito2002 git 图形化客户端
    liufish
    liufish
    Mar 16, 2018
    21
    更换 secret
    或者 rebase,再 push -f
    Raymon111111
    Raymon111111
    Mar 16, 2018
    22
    git reset --hard #commit 号#

    回滚到提交前一次的 commit 号, 记录就消失了...
    WispZhan
    WispZhan
    Mar 16, 2018
    23
    没有 code review 的惨剧。
    zjsxwc
    zjsxwc
    OP
    Mar 16, 2018
    24
    @WispZhan

    这个 code review 看不出来的
    ryuzaki113
    ryuzaki113
    Mar 16, 2018
    25
    重新生成一下 secret
    0xABCD
    0xABCD
    Mar 16, 2018 via Android
    26
    @arclin16 你这种方式提交不了吧
    otakustay
    otakustay
    Mar 16, 2018
    27
    楼上有很多做法,但前提都是服务器不留 reflog ……
    loading
    loading
    Mar 16, 2018 via iPhone
    28
    只要暴露出来,就应该改啊。
    0xABCD
    0xABCD
    Mar 16, 2018 via Android
    29
    如果合并到 dev 或者 master 分支就比较麻烦了,需要同时 reset feature 和 dev 分支,不然就算你 reset 了 feature 分支,你也不能 merge 到 dev 分支,它会提示你比 dev 分支旧的
    rohgeo
    rohgeo
    Mar 16, 2018
    30
    只抹掉服务器的仓库没用。还没有人拉取过的时候,你抹掉服务器的就可以。某则必须所有人的本地仓库也抹掉才行!如果有人已经拉取下来了,他再次提交的时候,会全部都提交回来!
    arclin16
    arclin16
    Mar 16, 2018
    31
    @0xABCD git push -f 只要强制提交就可以
    regiondavid
    regiondavid
    Mar 16, 2018
    32
    git reset --rebase
    jinfeng333
    jinfeng333
    Mar 16, 2018
    33
    reset 然后 push -f
    lovesky
    lovesky
    Mar 16, 2018 via Android
    34
    核弹级的 git 指令 git filter-branch
    Reficul
    Reficul
    Mar 17, 2018 via Android
    36
    @scnace 能,只要你知道之前那次 commit 的 hash,没有 gc 过仓库就能 checkout 出来
    flowfire
    flowfire
    Mar 17, 2018 via iPhone
    37
    其实我比较奇怪你们都不写 gitignore 的么。。。
    zjsxwc
    zjsxwc
    OP
    Mar 17, 2018
    38
    @flowfire

    在不能 ignore 的文件里,写了调试性质的代码啊
    flowfire
    flowfire
    Mar 17, 2018
    39
    @zjsxwc 把配置文件单独拉出来,在需要用到的地方 include 啊
    zjsxwc
    zjsxwc
    OP
    Mar 17, 2018
    40
    @flowfire 你事先无法预测你要在哪里 debug 的
    LancerXin
    LancerXin
    Mar 23, 2018
    41
    --force 神不知鬼不觉 慎用
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1582 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 162ms · UTC 07:39 · PVG 15:39 · LAX 23:39 · JFK 02:39
    ♥ Do have faith in what you're doing.