如何在没有历史记录的情况下推送新分支

问题描述 投票:0回答:5

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

如何清除所有历史记录并推送?

git
5个回答
221
投票

清除所有文件并不会删除历史记录。 您需要首先创建一个没有历史记录的分支,然后添加您的配置文件。 如今

git checkout
有一个
--orphan
选项,可以创建没有历史记录的分支。 以下是有关
--orphan
选项的信息:

--孤儿

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

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

当您想要从提交发布树而不暴露其完整历史记录时,这可能很有用。您可能希望执行此操作来发布项目的开源分支,该项目的当前树是“干净的”,但其完整历史记录包含专有或其他阻碍的代码位。

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

这里是 checkout 的文档链接。 您也可以运行

git help checkout

一旦您创建了没有历史记录的分支,那么当您将其推送到服务器时,它也不会具有该历史记录。 FWIW,它帮助我将

git push
视为“使远程分支看起来与本地分支相同”。 因此,如果你有历史,并且推动,它就会有历史。 如果你不这样做,那么推送的分支就不会。


80
投票

如何清除所有历史记录并推送?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

然后你就可以运行你的

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


参见。 这一句


22
投票

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

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

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

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

希望这可以帮助别人。


9
投票
git checkout --orphan <name_you_choose_for_orphan_branch>
git rm . -r -f

0
投票

Git 2.23.0 起,有一个

git switch
命令可用于实现相同的目标:
git switch --orphan <new-branch>

© www.soinside.com 2019 - 2024. All rights reserved.