我的本地git存储库有2个远程控制器:private
和public
。错误地,我运行了git push public feature_branch
,所以现在feature_branch
上的代码公开了,尽管它应该保持隐藏状态(现在)。这不是一个很大的隐私问题,但是我仍然想解决它。
我已经deleted the branch using the GitHub GUI。我还需要做其他事情吗?我不希望有人设法在该分支公开可见的30秒内克隆该存储库-我只关心缓存或其他新的git clone
现在可以下载的内容。
现在运行git push public --delete feature_branch
会得到error: unable to delete 'feature_branch': remote ref does not exist
,所以看来是正确的。
[我知道git filter-branch
,但我这样阅读它时首先要处理的数据不是我要提交的-我确实想提交代码,只是在决定这样做之前不要公开使用它等一下。
在这种情况下,您已经完成了所有需要做的事情。
((如果您愿意,可以在这里停下来。)
Git实际上就是关于[[commits。 Git存储库可以看作是一个大型的提交数据库(或者实际上是Git objects>],但是提交是与您一起使用的级别的数据库),并且您(或至少是Git)将检索这些对象通过其键,即其哈希ID。但是,更准确的描述了Git仓库的图片是作为[[two
数据库的:一个很大的Git对象,包括提交,以及一个很小的(或至少通常小得多)的names] >。这些名称包括所有分支和标记名称。名称存在的原因是双重的:哈希ID大而丑陋,没有人会记住它们。每个名称
尤其是组成链。 Git查找
latest提交(其哈希ID存储在分支名称中)并向后工作。承诺以这种方式找到
因此名称使我们find提交。如果它们没有名称,我们将找不到它们,它们也可能不存在(不久将不存在)。名称不必直接找到,而只能间接找到。但是,一旦作出提交,就不会改变。因此,从儿童提交到其父母,所有提交始终(总是)仅指向[[backwards。新的提交不影响现有的提交。 Git只能在 backwards 首先,他们访问了自己的姓名数据库。 我们的
在各种条件下,我们不保留,不保留某些或全部tag
名称,在这里实际上不值得描述。
我们保留其branch
名称,但将其重命名为我们的git filter-branch
代替origin/master
)。如果我们想保持all
名称不变,我们可以使用master
(这会带来很多后果,我们将在此处跳过)。我们通常不这样做,因为它对正常工作没有用。最后,原始存储库将移交所有提交,或者无论如何我们可以通过复制的名称找到所有提交。
我在上面说过[[中间,因为git clone --mirror
实际上有六个步骤:
创建一个新的空目录(或使用现有的空目录);
在此目录中创建存储库,并在那里进行其余工作;
添加名为git clone
或其他选定名称的origin
,它将进行数据库复制;git fetch
。git checkout
-在新克隆中创建一个git checkout
推荐的分支,通常是origin
,或者是您在master
命令行上选择的另一个名称。分支名称时,此:
从名称数据库中删除了名称
;因此,进行了一些提交1存储库所包含的不仅仅是这两个数据库。例如,每个名称-用Git的术语表示的每个[[ref
或reference-都可以拥有自己的先前存储的哈希ID的小型数据库。这些是git clone
中的纯文本文件。但是这些不会被复制。仅复制两个主要数据库,并且名称一个不是按原样复制的:它是通过访存步骤重建的。通常,当您使用存储库中的提交时,您需要Git将一个特定提交的快照提取到您的work-tree中。从非常强烈的意义上讲,工作树不是存储库本身的一部分:repository
是.git/logs/
目录中的内容。所谓的bare克隆缺少工作树,但仍然是存储库;大多数服务器端Git,例如GitHub上的,都是裸克隆。2
如果愿意,可以在此处选择一个tag名称,在这种情况下,.git
会在该名称中显示detached HEAD和no分支名称。新克隆。3
Git从未做出过特别强的security承诺,因此可能存在一些方法可以欺骗另一个Git(位于git checkout
)以允许复制提交。但是,您希望防止意外访问,而不是故意访问。