通过过滤分支进行的Git推送更改

问题描述:

通过此Q & A:How do I remove the old history from a git repository?的建议,我将我的master分支的历史记录切分为old_stuff分支。为了节省点击量,该过程涉及将最后一次提交master嫁接到根提交,实际上不给它父母,然后使用git filter-branch来使该更改永久。我现在的本地存储库应该是这样,有一个简短的master分支和一个悠久的历史分支。通过过滤分支进行的Git推送更改

但是,如果我git clone存储库,那个不应该有父母的提交具有与以前相同的父代。当我做git push -f origin master时,我结束了一个master分支,新创建的提交在它的头部,但是之前提交到master的父代。所以现在我有一个很长的old_stuff分支和一个master分支,只要再加一个提交。如果相关,则遥控器在Github上。

如何告诉远程存储库和其他副本修改新提交的父级?

PS:我已阅读关于如何在共享存储库中更改历史记录以打破其他人的副本的警告。我知道有关人员的姓名,并可以要求他们调整,所以我很乐意修改当前案例中的分支历史。

如何告诉远程存储库和其他副本修改新提交的父级?

你......不能这样做。如果你改变了一个提交的父对象,那么你就改变了这个提交,并伴随着所有与之相关的事情(新的sha1等)。根据指针所指向的方式,将“父母”视为“孩子”可能会更有帮助。

这听起来像你试图让你的历史记录下降到一个提交。如果是这种情况,那么结账(heh)git checkout --orphan。一旦你完成了这个任务,就需要指出你的主人(git reset --hard <new orphan branch>在主人身上)和强制推送到原点。

你的同胞所做的任何工作都需要在这位新主人的顶端重播; cherry-pick将在那里帮助。

+0

谢谢,这符合我的情况,并且比嫁接和过滤方法少得多。 –