有同事在一次本地 commit 里把极光推送的 secret 传上去了,然后他又 commit 一次把这个 commit 给覆盖掉,但通过gitk filename
仍旧可以看到他的那次提交的 secret。
然而不幸的是,上周已经把他的分支合并到了线上分支。
我们应该如何把他带有 secret 的提交抹去?
1
blakejia 2018-03-16 09:27:01 +08:00 1
更换 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 3
|
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 2
backup current files.
git reset --hard <your commit hash> git push origin master -f use your backup overwrite current files commit and push |
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 1
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 1
|
36
Reficul 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 神不知鬼不觉 慎用
|