Git孤立删除历史记录



如果我为git存储库创建一个孤立分支。

我做了一个git-rm-rf。

它还有我的历史记录和.git中其他分支的文件吗我仍然可以结账主分行。

我应该创建另一个存储库并清除.git吗?

在我的孤立分支上检查git日志只显示我的初始提交。

假设您指的是git checkout --orphanname:这样做的目的是将下一次提交安排为根提交。您现在所在的分支不存在。这基本上与在一个新的、完全空的存储库中的状态相同。

当您没有存储库,然后使用git init创建一个存储库时,新存储库就没有提交。这就产生了一个问题,因为在Git中,分支名称包含一个实际的、现有提交的哈希ID。因此,这个空存储库不能有分支。它没有提交。分支必须识别提交,但没有。所以它没有分支。尽管如此,您在分支master上。

Git处理这一问题的方式是允许你在一个不存在的分支上。这就是git checkout --orphan所做的——事实上all:它把你放在一个不存在的分支上。

当您处于此状态时,您进行的下一次提交将创建一次提交。该提交的创建使分支得以存在。Git将提交哈希ID写入分支名称,从而在进程中创建分支名称。分支现在存在,并且有一个提交。因为你所在的分支实际上并不存在,所以新的提交没有父级:它是根提交。

您编辑了您的问题以添加:

我做了git rm -rf .

这只会影响Git的索引。索引是Git用来保存将进入下一次提交的所有文件的实体。所以索引现在实际上是空的。除了在一个新的、完全空的存储库中,这种状态非常不寻常:通常,索引包含从您签出的提交中复制的所有文件。在进行新的根提交之前,您需要使用git add将一些文件放入索引中。

您还编辑了您的问题以划掉一个问题:

它还有我的历史记录和其他分支上的文件吗。。。

是。历史,在Git中,提交;提交是历史。添加指向新根提交的新分支名称对任何现有分支名称及其指向的提交都没有影响。创建新提交不会损害现有提交。

存储库中的所有提交都将继续在存储库中。您的新根提交现在位于存储库中,并且您的分支名称现在存在,指向新的根提交。

我不能100%确定你想做什么,但如果你只是做了

git rm -rf .

没有别的,你可能只做

git reset --hard

回到git rm -rf之前的状态。这就是你要寻找的"历史"吗?

或者,您可以硬重置到其他分支,或者承诺返回到以前的状态。

通常,在分支"master"之外创建新分支时,将继承其提交历史。例外情况是孤儿(或断开连接(分支。孤立分支没有父子分支与主分支提交的关系。

大多数提交都有一个父提交,一个明显的例外是root没有父提交的提交。创建孤立分支将保留它所基于的分支的工作树,但没有祖先提交。

创建孤立分支时,运行带有"孤立"标志的checkout命令,并为分支命名。运行git log --onelinefatal: your current branch 'myorphanbranch' does not have any commits yet

这是因为孤立分支不会从父分支继承提交。现在运行status命令。git status

您会注意到,尽管所有文件都已复制到孤立分支,但它们都在暂存区域中。这是因为到目前为止还没有在孤立分支中执行任何提交。

我们可以使用git rm -rf删除工作树中的所有文件。命令

现在我们有了一个没有提交和文件的分支。对孤立分支中的视图文件运行Gitls-files命令。你会注意到分支中没有文件。

尽管孤立分支并不常用,但它们有时在编写文档和创建静态GitHub页面时很方便它们有时还用于合并具有不同历史记录的两个不相关的存储库

最新更新