我在GitHub上创建了一个Gist,我看到了我不想让任何人看到的信息。我更新了文件,但每个人仍然可以访问文件的旧版本。
除了删除Gist之外,是否有方法可以明确删除该特定修订版?
我看到我不是唯一一个有这种问题的人(Git: delete a single remote revision),但我没有设法删除修订。这里显示的过程似乎有助于删除某些文件。我想删除整个修订版。
我在GitHub上创建了一个Gist,我看到了我不想让任何人看到的信息。我更新了文件,但每个人仍然可以访问文件的旧版本。
除了删除Gist之外,是否有方法可以明确删除该特定修订版?
我看到我不是唯一一个有这种问题的人(Git: delete a single remote revision),但我没有设法删除修订。这里显示的过程似乎有助于删除某些文件。我想删除整个修订版。
8条答案
按热度按时间q1qsirdb1#
Github有一个关于删除敏感数据的帮助页面:
http://help.github.com/removing-sensitive-data/
由于gist只是git仓库,你应该能够在本地克隆你的gist,在那里做清理,并做一个强制推送,用清理后的仓库覆盖github版本。
是的,想了想之后:如果
<commit>
是你想要“移除”的提交,那么将
<commit>
的行标记为edit
,保存并退出。git会将工作目录设置为你提交
<commit>
后的状态。修复文件,使用git add
和git commit --amend
修复提交。然后执行git rebase --continue
。如果下一次提交所做的唯一一件事就是删除敏感数据,那么它可能会被自动删除,因为在现在修改的提交之后,它不包含任何更改。然后,执行
git push -f
命令来强制更新(因为它现在是非快进的,这意味着它会更改已经发布的git历史记录)。qlzsbp2j2#
公认的答案是好的,但有点难以理解。这是同样的答案,但有点甜。
正如Tilman Vogel所说,Gists只是存储库,因此这种方法适用于Github存储库和Gists。
让我们假设只有一个版本包含您不想显示的密码。您已签入删除了密码的新版本,并希望删除以前的版本。如果有许多提交显示密码,您应该能够调整此过程。
首先,修复必须在本地机器上完成(而不是在github中)。要做到这一点,首先要在本地克隆gist。gist在github上的页面应该会告诉你如何创建一个私有克隆,如果你点击私有克隆的URL。例如:
这给了你一个本地副本,你需要变基(这意味着在版本中乱翻)。
其中eeccaa是包含密码的(第一个)版本。您可以从要点页面修订栏中获得此数字。^是必需的。该命令的意思是“让我以交互方式将版本从eexxaa更改为最新版本”。该命令将打开一个编辑器,该编辑器中每行都有一个命令,对应于存储库中的每个版本。默认命令是'pick',意思是'使用或保留此版本'。
编辑器中的第一行应类似于
将其更改为
即在没有密码的版本上将单词“pick”更改为“squash”。这将要求变基将新的(无密码)版本压缩到旧的(携带密码的)版本中,实际上删除了版本eexxaa。很明显你的版本将是eexxaa或ffxxbb以外的版本,不要在任何地方使用eexxaa或ffxxbb!
正如@kand所指出的,您应该
squash
包含密码的每个版本。在编辑器中保存并退出(如果是vi:x)。变基现在应该打开一个新的编辑器,显示两个版本的提交消息,并要求一个合并的提交消息。这些消息很可能是空的,但是你需要在这里放一些东西,否则变基将中止。键入一条消息,保存它并退出,变基应该完成。
您现在有了一个没有包含密码版本的存储库。要回到要点,请用途:
这会将更改强制到github repo上。点击刷新,你应该能够在浏览器中检查出有问题的版本已经从右手边的修订栏中消失了。
就是这样!
ig9co6j13#
如果您不关心显示要点上的任何修订,您可以执行以下操作来消除所有历史记录,只显示一个修订。
你可以在你的编辑器中看到所有的提交。只需选择第一个,并将其他所有内容替换为
s
或squash
。完成后,保存并添加一条提交消息,然后像这样强制推送到master,就可以了。唯一可见的修订是添加文件,仅此而已。
ergxz8rk4#
如果你想从仓库中完全删除一些东西,你需要使用git filter-branch。
http://git-scm.com/docs/git-filter-branch
vq8itlhq5#
2022-03测试
基于
squash
方式的许多解决方案。我只是直接说删除最后一个(或多个)提交
(没有挤压,没有新的提交版本生成),这可能具有共同的情况。
删除提交解决方案
当
git rebase -i eexxaa^
步进时,只需将最后一次不需要提交标记为
drop
,保存它。最后
git push -f
然后将降版也在要点页中删除。
gist的repo url从哪里获取?
只要打开要点页面>复制浏览器地址栏中的URL,
使用
git clone $the_url
,它可以工作。注意:使用http(s)也需要github access token而不是密码;
访问令牌只需要
gist
权限(可以强制推送)mdfafbf16#
这是对Meesern的回答。当您尝试压缩或修复并变基--continue时,需要添加注解或
--allow-empty-message
。这是很耗时的,而且不知何故,我的提交并没有因为这样做而离开gist的修订列表。我找到了一个更简单的解决方案:您可以删除rebase to-do列表中不必要的提交行,
:wq!
、git rebase --continue
和git push -f
。9wbgstp77#
我尝试了其他答案,但有两个问题:
1.我不能把它变基,我想这是因为仓库里有没有消息的提交。
1.我不能推它(是的,用
force
)。我解决了这两个问题,首先在第一次提交时创建另一个分支,然后cherry-picking一个接一个地处理其余的提交,而不是自动提交它们(这样我就可以在提交之前编辑它们)。
之后,我将
master
分支重置为新分支:git switch master && git reset --hard temp
。在推送之前,我将遥控器更改为SSH版本:
git remote set-url origin [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) :<<gist id>>.git
然后,使用
git push --force
,它推动并改变了要点修订。bvjxkvbb8#
以前的答案都没有完全烤或为我工作,所以我推出了我自己的。在这里分享它,以防对任何人都有用。脚本中有一些错误检查,但请检查它并检查您正在做什么,因为这确实有可能破坏数据。
保存下面的脚本并执行,提供Gist的URL作为参数。如果提供的URL有一个特定修订的路径,那将被用于变基,否则它将把你的要点重置为“提示”-所有以前的提交将被删除。
初始克隆后会有一个暂停,以便您可以根据需要进行其他编辑。
gist-clean.sh
范例: