有同事在一次本地 commit 里把极光推送的 secret 传上去了,然后他又 commit 一次把这个 commit 给覆盖掉,但通过gitk filename
仍旧可以看到他的那次提交的 secret。
然而不幸的是,上周已经把他的分支合并到了线上分支。
我们应该如何把他带有 secret 的提交抹去?
![]() | 1 blakejia 2018-03-16 09:27:01 +08:00 ![]() 更换 secret 更实在 |
![]() | 2 ycz0926 2018-03-16 09:28:36 +08:00 via iPhone 把代码删了,重新初始化仓库 |
![]() | 3 pagxir 2018-03-16 09:29:38 +08:00 via Android 直接删库跑路。 |
4 leviathan0992 2018-03-16 09:30:28 +08:00 强制回滚 |
5 arclin16 2018-03-16 09:32:36 +08:00 reset 到提交 secret 之前的节点吧 然后重新 commit... |
6 scnace 2018-03-16 09:33:15 +08:00 via Android rebase -i ? 还有这种 key 不是应该做成 conf 的形式吗? |
7 SergeGao 2018-03-16 09:33:37 +08:00 |
![]() | 8 vegito2002 2018-03-16 09:33:54 +08:00 reset 不行吗? gitk 没用过不知道难道是有什么特殊的功能; |
![]() | 9 SEARCHINGFREE 2018-03-16 09:35:29 +08:00 #1 +1 secret 都暴露了吧 |
![]() | 10 liuzelei 2018-03-16 09:42:09 +08:00 ![]() |
11 dahvlh 2018-03-16 09:42:09 +08:00 reset 然后 push -f 吧 |
![]() | 12 timwei 2018-03-16 09:43:47 +08:00 #先记录暴露的 commit 的 hash、当前版本的 hash git log #回到旧版本 git checkout 旧版本 hash #创建回滚用分支 git checkout -b 回滚用的分支 #套用回滚版本到当前版本中间的修改 git checkout 当前版本 hash . #移除暴露的档案后 git push -f 到 repo, 记得把 repo 的 force 保护关掉 |
![]() | 13 lllllllllllllll 2018-03-16 09:48:40 +08:00 ![]() backup current files. git reset --hard <your commit hash> git push origin master -f use your backup overwrite current files |
![]() | 14 timwei 2018-03-16 09:48:40 +08:00 虽然我也觉得直接换 secret 会好点 |
15 uolcano 2018-03-16 09:50:42 +08:00 via Android @scnace rebase 后其实还是能通过 reflog 看到这次操作的,不过被回滚的内容就不知道能不能再恢复回来,我还没试过恢复 |
16 wwulfric 2018-03-16 09:51:29 +08:00 1. 作为分布式代码控制,你不能保证其他人电脑上没有备份 2. git rebase -i,然后在你要删除的 commit 那里把 pick 换成 drop,然后强推,至少服务器记录里可以删掉 3. 最好的方式是换 secret 吧 |
![]() | 17 ZxBing0066 2018-03-16 10:01:42 +08:00 ![]() reset 后 push --force 然而已经上线了不排除已经泄露的可能,还是换 secret 实在 |
![]() | 19 ex44559 2018-03-16 10:06:58 +08:00 git rebase |
20 closedevice 2018-03-16 10:13:58 +08:00 @vegito2002 git 图形化客户端 |
![]() | 21 liufish 2018-03-16 10:27:36 +08:00 更换 secret 或者 rebase,再 push -f |
22 Raymon111111 2018-03-16 10:30:19 +08:00 git reset --hard #commit 号# 回滚到提交前一次的 commit 号, 记录就消失了... |
23 WispZhan 2018-03-16 10:31:28 +08:00 没有 code review 的惨剧。 |
25 ryuzaki113 2018-03-16 11:31:46 +08:00 重新生成一下 secret |
![]() | 27 otakustay 2018-03-16 11:41:04 +08:00 楼上有很多做法,但前提都是服务器不留 reflog …… |
![]() | 28 loading 2018-03-16 11:41:06 +08:00 via iPhone 只要暴露出来,就应该改啊。 |
29 0xABCD 2018-03-16 11:50:43 +08:00 via Android 如果合并到 dev 或者 master 分支就比较麻烦了,需要同时 reset feature 和 dev 分支,不然就算你 reset 了 feature 分支,你也不能 merge 到 dev 分支,它会提示你比 dev 分支旧的 |
30 rohgeo 2018-03-16 12:09:50 +08:00 只抹掉服务器的仓库没用。还没有人拉取过的时候,你抹掉服务器的就可以。某则必须所有人的本地仓库也抹掉才行!如果有人已经拉取下来了,他再次提交的时候,会全部都提交回来! |
![]() | 32 regiondavid 2018-03-16 17:28:54 +08:00 git reset --rebase |
![]() | 33 wujunze 2018-03-16 19:03:27 +08:00 reset 然后 push -f |
34 lovesky 2018-03-16 19:23:20 +08:00 via Android 核弹级的 git 指令 git filter-branch |
![]() | 35 xiqingongzi 2018-03-16 19:28:44 +08:00 ![]() |
![]() | 36 Reficul &nbs; 2018-03-17 02:18:24 +08:00 via Android @scnace 能,只要你知道之前那次 commit 的 hash,没有 gc 过仓库就能 checkout 出来 |
![]() | 37 flowfire 2018-03-17 02:27:49 +08:00 via iPhone 其实我比较奇怪你们都不写 gitignore 的么。。。 |
![]() | 41 LancerXin 2018-03-23 10:01:06 +08:00 --force 神不知鬼不觉 慎用 |