Git推送主机仅在给定提交之后
我有一个本地git项目,我想通过推动公共Github回购来开源。假设这是本地项目历史:Git推送主机仅在给定提交之后,git,github,git-push,Git,Github,Git Push,我有一个本地git项目,我想通过推动公共Github回购来开源。假设这是本地项目历史: F-G [feature-1] / \ A-B-C-D-E H-I-J [master] ^ \(first public ready commit) 然而,我有一个问题:在原型设计过程中,我硬编码了一些敏感数据。假设在提交D之前,代码中有我不希望任何人看到的数据 如何在本地回购协议中保留变更历史记录,但仅从E开始发布
F-G [feature-1]
/ \
A-B-C-D-E H-I-J [master]
^
\(first public ready commit)
然而,我有一个问题:在原型设计过程中,我硬编码了一些敏感数据。假设在提交D之前,代码中有我不希望任何人看到的数据
如何在本地回购协议中保留变更历史记录,但仅从E
开始发布
我正在考虑两种方法:
E
之前挤压提交,这将使E
成为初始版本主控
稍晚一点开始欢迎使用命令行代码段 在这种情况下,我会使用移植文件并重写: 首先,标记D和E。从这里开始,我假设它们可以被称为D和E 现在,伪造E的历史记录,使其没有父对象:
git rev-parse E >.git/info/grafts
然后,重写提交以反映此历史记录:
git filter-branch -- --all
现在,您有一个指向敏感数据的本地标记D和一个指向干净数据的本地标记E作为初始提交:
F'-G' [feature-1]
/ \
E' H'-I'-J' [master]
A-B-C-D
请注意,您现在不想运行git过滤器分支
在本地,您的历史记录如下所示:
F'-G' [feature-1]
/ \
A-B-C-D-E' H'-I'-J' [master]
F'-G'[特征-1]
/ \
A-B-C-D-E'H'-I'-J'[母版]
但是如果你推,你会推真正的E',它没有父对象,那么远,你只能得到
F'-G' [feature-1]
/ \
E' H'-I'-J' [master]
F'-G'[特征-1]
/ \
E'H'-I'-J'[母版]
在这种情况下,我会使用移植文件并重写: 首先,标记D和E。从这里开始,我假设它们可以被称为D和E 现在,伪造E的历史记录,使其没有父对象:
git rev-parse E >.git/info/grafts
然后,重写提交以反映此历史记录:
git filter-branch -- --all
现在,您有一个指向敏感数据的本地标记D和一个指向干净数据的本地标记E作为初始提交:
F'-G' [feature-1]
/ \
E' H'-I'-J' [master]
A-B-C-D
请注意,您现在不想运行git过滤器分支
在本地,您的历史记录如下所示:
F'-G' [feature-1]
/ \
A-B-C-D-E' H'-I'-J' [master]
F'-G'[特征-1]
/ \
A-B-C-D-E'H'-I'-J'[母版]
但是如果你推,你会推真正的E',它没有父对象,那么远,你只能得到
F'-G' [feature-1]
/ \
E' H'-I'-J' [master]
F'-G'[特征-1]
/ \
E'H'-I'-J'[母版]
在这种情况下,我会使用移植文件并重写: 首先,标记D和E。从这里开始,我假设它们可以被称为D和E 现在,伪造E的历史记录,使其没有父对象:
git rev-parse E >.git/info/grafts
然后,重写提交以反映此历史记录:
git filter-branch -- --all
现在,您有一个指向敏感数据的本地标记D和一个指向干净数据的本地标记E作为初始提交:
F'-G' [feature-1]
/ \
E' H'-I'-J' [master]
A-B-C-D
请注意,您现在不想运行git过滤器分支
在本地,您的历史记录如下所示:
F'-G' [feature-1]
/ \
A-B-C-D-E' H'-I'-J' [master]
F'-G'[特征-1]
/ \
A-B-C-D-E'H'-I'-J'[母版]
但是如果你推,你会推真正的E',它没有父对象,那么远,你只能得到
F'-G' [feature-1]
/ \
E' H'-I'-J' [master]
F'-G'[特征-1]
/ \
E'H'-I'-J'[母版]
在这种情况下,我会使用移植文件并重写: 首先,标记D和E。从这里开始,我假设它们可以被称为D和E 现在,伪造E的历史记录,使其没有父对象:
git rev-parse E >.git/info/grafts
然后,重写提交以反映此历史记录:
git filter-branch -- --all
现在,您有一个指向敏感数据的本地标记D和一个指向干净数据的本地标记E作为初始提交:
F'-G' [feature-1]
/ \
E' H'-I'-J' [master]
A-B-C-D
请注意,您现在不想运行git过滤器分支
在本地,您的历史记录如下所示:
F'-G' [feature-1]
/ \
A-B-C-D-E' H'-I'-J' [master]
F'-G'[特征-1]
/ \
A-B-C-D-E'H'-I'-J'[母版]
但是如果你推,你会推真正的E',它没有父对象,那么远,你只能得到
F'-G' [feature-1]
/ \
E' H'-I'-J' [master]
F'-G'[特征-1]
/ \
E'H'-I'-J'[母版]
我将@hvd的答案作为被接受的答案,因为太棒了 然而,由于我的特定用例用于删除敏感数据,因此我采用了中概述的路线。特别是通过使用:
对于任何试图做类似事情的人来说,这只是一次机会,但我肯定会在未来坚持使用BFG。我将把@hvd的答案作为公认答案,因为它太棒了 然而,由于我的特定用例用于删除敏感数据,因此我采用了中概述的路线。特别是通过使用:
对于任何试图做类似事情的人来说,这只是一次机会,但我肯定会在未来坚持使用BFG。我将把@hvd的答案作为公认答案,因为它太棒了 然而,由于我的特定用例用于删除敏感数据,因此我采用了中概述的路线。特别是通过使用:
对于任何试图做类似事情的人来说,这只是一次机会,但我肯定会在未来坚持使用BFG。我将把@hvd的答案作为公认答案,因为它太棒了 然而,由于我的特定用例用于删除敏感数据,因此我采用了中概述的路线。特别是通过使用: 对于任何想做类似事情的人来说,这只是一次机会,但我肯定会在未来坚持BFG