git 如何把某次 commit 抹掉?

2018-03-16 09:24:30 +08:00
 zjsxwc

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

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

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

8198 次点击
所在节点    程序员
41 条回复
liufish
2018-03-16 10:27:36 +08:00
更换 secret
或者 rebase,再 push -f
Raymon111111
2018-03-16 10:30:19 +08:00
git reset --hard #commit 号#

回滚到提交前一次的 commit 号, 记录就消失了...
WispZhan
2018-03-16 10:31:28 +08:00
没有 code review 的惨剧。
zjsxwc
2018-03-16 10:42:40 +08:00
@WispZhan

这个 code review 看不出来的
ryuzaki113
2018-03-16 11:31:46 +08:00
重新生成一下 secret
0xABCD
2018-03-16 11:37:12 +08:00
@arclin16 你这种方式提交不了吧
otakustay
2018-03-16 11:41:04 +08:00
楼上有很多做法,但前提都是服务器不留 reflog ……
loading
2018-03-16 11:41:06 +08:00
只要暴露出来,就应该改啊。
0xABCD
2018-03-16 11:50:43 +08:00
如果合并到 dev 或者 master 分支就比较麻烦了,需要同时 reset feature 和 dev 分支,不然就算你 reset 了 feature 分支,你也不能 merge 到 dev 分支,它会提示你比 dev 分支旧的
rohgeo
2018-03-16 12:09:50 +08:00
只抹掉服务器的仓库没用。还没有人拉取过的时候,你抹掉服务器的就可以。某则必须所有人的本地仓库也抹掉才行!如果有人已经拉取下来了,他再次提交的时候,会全部都提交回来!
arclin16
2018-03-16 14:45:07 +08:00
@0xABCD git push -f 只要强制提交就可以
regiondavid
2018-03-16 17:28:54 +08:00
git reset --rebase
wujunze
2018-03-16 19:03:27 +08:00
reset 然后 push -f
lovesky
2018-03-16 19:23:20 +08:00
核弹级的 git 指令 git filter-branch
xiqingongzi
2018-03-16 19:28:44 +08:00
Reficul
2018-03-17 02:18:24 +08:00
@scnace 能,只要你知道之前那次 commit 的 hash,没有 gc 过仓库就能 checkout 出来
flowfire
2018-03-17 02:27:49 +08:00
其实我比较奇怪你们都不写 gitignore 的么。。。
zjsxwc
2018-03-17 08:29:21 +08:00
@flowfire

在不能 ignore 的文件里,写了调试性质的代码啊
flowfire
2018-03-17 10:57:32 +08:00
@zjsxwc 把配置文件单独拉出来,在需要用到的地方 include 啊
zjsxwc
2018-03-17 13:00:30 +08:00
@flowfire 你事先无法预测你要在哪里 debug 的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/438540

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX