如何删除github gist的特定修订版?

时间:2011-05-06 13:40:36

标签: git github revision gist

我在GitHub上创建了一个Gist,我看到了我不希望任何人看到的信息。 我从那时起更新了文件,但每个人仍然可以访问该文件的旧版本。

除了删除Gist之外,有没有办法明确删除该特定修订版?

我看到我不是唯一一个遇到这种问题的人(Git: delete a single remote revision),但我没有设法删除修订版。 此处指示的过程似乎有助于删除一些文件。我想删除整个修订版。

5 个答案:

答案 0 :(得分:33)

Github有一个关于删除敏感数据的帮助页面:

http://help.github.com/removing-sensitive-data/

由于gists只是git存储库,你应该能够在本地克隆你的要点,在那里进行清理并强制推送用清理后的repo覆盖github版本。

是的,在考虑之后:如果<commit>是您要“删除”的提交,请执行

 git rebase -i <commit>^

<commit>的行标记为edit,保存并退出。

git会在您输出<commit>后将工作目录设置为州。修复该文件,使用git addgit commit --amend来修复提交。然后做git rebase --continue。如果唯一的事情,即下一次提交,是删除敏感数据,它可能会自动删除,因为它在现在修改的提交后不包含任何更改。

然后,执行git push -f强制更新(因为它现在是非快进的,这意味着它会更改已发布的git历史记录)。

答案 1 :(得分:23)

接受的答案很好,但有点难以理解。这是相同的答案,但有点甜。

正如Tilman Vogel所说,要点只是存储库,因此这种方法适用于github存储库和gists。

我们假设只有一个版本包含您不想显示的密码。您已经检查了新版本并删除了密码,并希望摆脱以前的版本。如果有许多提交显示密码,您应该能够调整此过程。

首先,修复必须在本地计算机上完成(而不是在github中)。要做到这一点,首先要在本地克隆要点。 github上的gist页面应该向您展示如果单击私有克隆URL,如何创建私有克隆。类似的东西:

git clone git@gist.github.com:421xxx1.git gist-421xxx1

这为您提供了一个您需要重新定义的本地副本(意味着版本的存在)。

cd gist-421xxx1
git rebase -i eexxaa^

其中eeccaa是包含密码的(第一个)版本。您可以从gist页面修订列中获取此编号。 ^是必需的。该命令意味着'让我以交互方式将eexxaa的verisons更改为最新的。该命令打开一个编辑器,该编辑器在repo中的每个版本的每一行上都填充了一个命令。默认命令是'pick',意思是'使用或保留此版本'。

编辑器中的第一行应该类似于

pick eexxaa    <- the version with the password
pick ffxxbb    <- the first version without the password

将此更改为

pick eexxaa    
squash ffxxbb 

即。在没有密码的版本上将“pick”改为“squash”。这将要求rebase将新的(无密码)版本压缩到旧的(密码携带)版本,基本上删除版本eexxaa。显然你的版本将不是eexxaa或ffxxbb,不会在任何地方使用eexxaa或ffxxbb!

正如@kand所说,你应该squash每个包含密码的版本。

在编辑器中保存并退出(如果它是vi:x)。 rebase现在应该打开一个新的编辑器,显示两个版本的提交消息,并要求一个组合的提交消息。对于一个要点,这些消息很可能是空的,但你确实需要在这里放一些东西或者rebase会中止。输入消息,保存并退出,然后完成rebase。

您现在拥有一个没有包含密码的版本的存储库。为了得到这个要点:

git push -f

这将强制更改到github仓库。点击刷新,您应该能够在浏览器中检查违规版本是否已从右侧的修订列中删除。

多数民众赞成!

答案 2 :(得分:2)

如果要从存储库中完全删除某些内容,则需要使用git filter-branch。

http://git-scm.com/docs/git-filter-branch

答案 3 :(得分:2)

如果您不关心在要点上显示任何修订,您可以执行以下操作以消除所有历史记录,只显示一个修订版。

git clone some-gist-repo
cd some-gist-repo
git rebase -i --root $tip

您可以在编辑器中查看该要点的所有提交。只需选择第一个,然后使用ssquash替换其他所有内容。完成后,保存并添加一个提交消息,然后像这样强制推送掌握,你很好。

git push -f origin master

唯一可见的修订是添加文件,就是这样。

答案 4 :(得分:0)

添加到meesern的答案。 当您尝试压缩或修复并重新绑定 - 继续时,您需要添加评论或--allow-empty-message。这是耗时的,不知何故,我的提交并没有通过这样的方式从gist的修订列表中消失。

我找到了一个更简单的解决方案: 您只需删除rebase待办事项列表中不必要的提交行,:wq!git rebase --continuegit push -f