125

我有两个不相关的分支,master 和 configs 的 git repo。我已经创建了配置,清除了所有文件,然后只放在配置文件中。现在我想将它推送到远程仓库,但因为它是新的、空的分支(没有我所有更改的日志和原始分支的旧修订)。

我怎样才能清除所有的历史并推动它?

4

4 回答 4

185

清除所有文件并不会消除历史记录。您需要先创建一个没有历史记录的分支,然后添加您的配置文件。这些天git checkout有一个--orphan选项可以创建一个没有历史的分支。以下是有关该--orphan选项的信息:

--orphan <新分支>

创建一个名为 <new_branch> 的新孤立分支,从 <start_point> 开始并切换到它。在这个新分支上进行的第一次提交将没有父级,它将成为与所有其他分支和提交完全断开的新历史的根。

索引和工作树的调整就像您之前运行过“git checkout <start_point>”一样。这允许您通过轻松运行“git commit -a”来创建一个新的历史记录,该历史记录记录一组类似于 <start_point> 的路径以进行根提交。

当您想从提交中发布树而不暴露其完整历史时,这可能很有用。您可能希望这样做以发布一个项目的开源分支,该项目的当前树是“干净的”,但其完整历史记录包含专有或其他受累的代码位。

如果你想开始一个断开的历史记录,记录一组与 <start_point> 完全不同的路径,那么你应该在创建孤立分支后立即通过运行“git rm -rf”清除索引和工作树。 " 从工作树的顶层开始。之后,您将准备好准备新文件、重新填充工作树、从其他地方复制它们、提取 tarball 等。

这是checkout文档的链接。你也可以跑步git help checkout

一旦您创建了没有历史记录的分支,那么当您将其推送到服务器时,它也不会具有该历史记录。FWIW,它帮助我将其git push视为“使远程分支看起来与我的本地分支相同”。所以如果你有历史,并且推动,它就会有历史。如果你不这样做,那么推送的分支不会。

于 2012-09-22T11:32:02.917 回答
53

我怎样才能清除所有的历史并推动它?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

然后你可以运行你的

git push <remote-name> <branch-name>


参看。这个单线

于 2016-01-22T19:53:54.367 回答
19

我需要这样做以向自由职业者发送一些代码,而无需共享私人信息或删除我的历史记录。

如果你们中的任何人使用 SourceTree,这就是我设法做到的。如果我做错了什么或忘记了什么,请告诉我,因为我对源代码控制管理非常不熟悉。

  1. 我去了源树上的终端按钮。
  2. 我使用以下命令创建了一个新的“孤儿”分支:“git checkout --orphan clean-ver”,其中 clean-ver 是我的分支名称
  3. 我关闭了终端,看到我的提交日志被清除了,因为我在一个新的孤立分支中。我暂存了所有源代码并提交了更改。
  4. 我在存储库>添加远程或存储库>存储库设置>添加中设置了我的 bitbucket 存储库。
  5. 我关闭了它,然后单击了按钮
  6. 我选择了我的新“clean-ver”分支说好的。

当我检查 bitbucket 时,似乎这似乎有效并丢弃了我的提交历史记录。

希望这可以帮助某人。

于 2014-03-17T16:29:00.267 回答
1
git checkout --orphan <name_you_choose_for_orphan_branch>
git rm . -r -f
于 2021-11-20T08:28:02.377 回答