【问题标题】:Git: delete a single remote revisionGit:删除单个远程修订
【发布时间】:2011-01-16 16:34:26
【问题描述】:

我已经开始将我的私人 subversion 项目切换到 git (Github) 并将代码发布给公众。因此,我是一个 git 新手。

很遗憾,一个项目的修订版包含机密数据。修订没有标记,我只知道它的哈希值。

有没有办法从远程 git 存储库中完全删除该特定版本? 这是一个单独的项目,因此不会对任何人造成伤害。

【问题讨论】:

  • “远程”是什么意思?如果它是一个单独的项目,为什么会有一个“远程”回购?或者这是人们从中拉出来的?如果它是单独的,那么你不能删除(如文件系统删除,或重置回第一次提交并快进等)“远程”git repo,然后用修改后的版本替换它吗? :) 当然,这假设您知道如何从本地存储库中删除修订?
  • 它曾经是一个单独的项目,因为我现在正在打开代码。我按照github.com/guides/import-from-subversion 上的教程导入了存储库,然后我意识到有一个包含机密数据的提交。我不知道如何从 github 和我的本地克隆中只删除该修订。我在github上打开了代码库,所以代码是我的(将在GPLv3许可下发布)
  • 参见 GitHub 上的“删除敏感数据”:help.github.com/removing-sensitive-data
  • 您链接的教程没有为我的问题提供解决方案。它只是从所有修订中删除文件。我不想删除文件,我只想删除修订版。无论如何,我能够通过谷歌搜索找到解决方案,找到另一个 SO 问题。

标签: git github


【解决方案1】:

here 的帖子解决了我的问题。

如果您要修复的提交不是最新的:

  1. git rebase --interactive $parent_of_flawed_commit

    如果您想修复几个有缺陷的提交,请传递其中最旧的提交的父级。

  2. 编辑器会出现,列出自您提交以来的所有提交。

    1. 在您要修复的任何提交之前将 pick 更改为 edit
    2. 保存后,git 将重放列出的提交。
  3. 对于您说要编辑的每个提交,Git 都会退回到 shell:

    1. 以您喜欢的任何方式更改提交。
    2. git commit --amend
    3. git rebase --continue

这个序列的大部分内容将通过各种命令的输出向您解释。这很简单,您不需要记住它——只要记住git rebase --interactive 可以让您更正提交,无论它们是多久之前的。

【讨论】:

  • 我认为,使用squash 而不是edit 会更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2012-11-28
  • 2016-03-13
  • 2017-01-19
  • 2013-03-26
  • 2019-02-05
  • 2019-06-02
相关资源
最近更新 更多