删除/切断Git的修订/提交历史记录

删除/切断Git的修订/提交历史记录,git,Git,我有一个项目,其中包含我自己的另一个项目的跟踪,我将其用作一种模板项目。现在我想从存储库中完全删除这些跟踪。基本上,我想剪掉旧的垃圾。所以我有 A -- B -- C -- D -- E -- F 想得到像这样的东西吗 D -- E -- F 从存储库中完全删除A-B-C。Github有一篇关于删除敏感数据的好文章,因此您也需要提交: 假设主机处于提交F: 试图遵循@vergenzt的答案,但git从第一次提交开始就开始应用补丁程序,在我需要开始提交之前,提交了3000多次 我的目的是在当前

我有一个项目,其中包含我自己的另一个项目的跟踪,我将其用作一种模板项目。现在我想从存储库中完全删除这些跟踪。基本上,我想剪掉旧的垃圾。所以我有

A -- B -- C -- D -- E -- F
想得到像这样的东西吗

D -- E -- F

从存储库中完全删除A-B-C。

Github有一篇关于删除敏感数据的好文章,因此您也需要提交:

假设主机处于提交F:


试图遵循@vergenzt的答案,但git从第一次提交开始就开始应用补丁程序,在我需要开始提交之前,提交了3000多次

我的目的是在当前项目的基础上,为新项目进行较小规模的回购。不幸的是,我需要从当前项目中保存几个月的历史记录。这就是我最终如何做到的:

命令行工具不太方便执行此操作,因为您需要解决冲突。幸运的是,在Ortoisegit中有一个Rebase功能,您需要提供两个barnches:master left和temp right。然后在临时分支所在的提交之前跳过所有提交,包括提交选择提交,并在右键单击菜单中使用“跳过”。在rebase启动之后,您将得到一些冲突,您可以在rebase GUI中解决这些冲突。我总是在右键单击菜单中选择使用主分支版本。这比使用CLI花费的时间要少得多。 在完成所有工作之后,我额外复制了原始存储库最新版本中的所有项目文件,以确保不会丢失新存储库中的所有文件。我只有几个文件在.gitignore中,但不知何故没有被忽略。其他文件也一样


我希望这对某人有所帮助。

我知道这是一个老问题,但我今天来到这里搜索这个话题

对于大量提交问题,您可以尝试在rebase命令中使用-X theres或-X ours,即

git rebase-X他们的-i头~20

两者的区别已经解释了


我希望这对其他人有用

重复问题。检查这里:不是重复的。你不能使用git-rebase-i删除第一次提交。vergenzt是正确的,这些步骤没有产生预期的结果。太棒了,谢谢!我猜git push-f会用新的覆盖远程回购协议?是的。不过,请务必小心,因为您正在编辑历史记录。如果其他人从您的存储库中提取了数据,他们将花很长时间弄清楚发生了什么。F不再是相同的提交,因此如果他们尝试提交到F并推送,它将不起作用。提交命令的附加标志:您可以使用git commit-C重用原始提交的提交消息、作者、日期等。在发出git rebase-on temp master I get First后,倒带head以在其上重播您的工作。。。快速转发主服务器到临时服务器。存在大量冲突,我们如何更改合并策略以自动解决冲突?
 # create a new branch with D's content
$ git checkout --orphan temp <d-sha1>
$ git commit

 # rebase everything else onto the temp branch
$ git rebase --onto temp <d-sha1> master

 # clean up
$ git checkout master
$ git branch -d temp
$ git reflog expire --expire=now --all
$ git gc --prune=now