我一直在研究一个即将与其他开发人员共享的Git项目。我的项目中有一部分包含我不允许分享的信息。
如果我的项目历史记录看起来像A - > B - > C - > D - > E - > F,并且提交C和D中包含的信息是私有的,是否可以修改我的项目历史记录,使其看起来像A - > B - > E' - >在共享之前,F'(其中E'和F'是没有机密信息的E和F)?
据我了解,如果我在F和B之间执行手动合并来创建F',那么最终提交将是我想要的,但它不会保留项目历史记录。我认为它看起来像A - > B - > F'代替A - > B - > E' - > F”。
答案 0 :(得分:1)
我相信你所寻找的是一种变革。
如果提交C和D是自包含的,即如果提交E和F不需要它们,则应该没问题。
适当的语法是:
$ git rebase --onto B D F
其中B,D和F是哈希或对这些提交的引用。
如果这些提交已经被推送到公共存储库,那么在执行此操作时要小心,因为已经公开的提交的重写历史记录通常是危险的并且是不鼓励的。
答案 1 :(得分:0)
有简单而复杂的方法来实现这一目标。这是一个非常简单的方法,它可以让您轻松grep
区分麻烦的片段以验证它们的缺席。
创建一个新的仓库以进行分享。 (您可以将无历史记录的F'快照存储在其中并完成,除非您希望保留一些历史记录。)
在旧仓库中使用git format-patch
在/ tmp中存储A,B,E',F'的差异。
使用git am
将这些差异应用于新仓库。发布它。
答案 2 :(得分:0)
有一个强大的工具可以让您删除敏感信息,无论提交的是什么提交:BFG,The Big Repo Cleaner。
BFG将允许您有选择地从您的回购历史记录中删除敏感信息。例如,您可以使用它删除错误添加到存储库的文件。它还允许从存储库中的文件历史中删除特定字符串。
BFG优于其他方法的优势在于它可以在不影响不受关注的提交的情况下擦除历史记录。但是,它将更改存储库中已有的一些提交的提交ID。有关详细信息,请参阅常见问题解答。