Git推送通过filter-branch进行的更改

时间:2011-10-31 13:32:30

标签: git github git-filter-branch

我通过此Q& A:How do I remove the old history from a git repository?的建议,将master分支的历史记录切换为old_stuff分支。为了节省您的点击率,该过程涉及将最后一次master提交移植到根提交,实际上不给它父,然后使用git filter-branch使该更改成为永久更改。我的本地存储库现在应该如何,具有短master分支和长历史分支。

但是如果我git clone存储库,那个不应该拥有父代的提交具有与以前相同的父代。当我执行git push -f origin master时,我最终得到一个master分支,其中包含新创建的提交,但前面提交的父项为master。所以现在我有一个很长的old_stuff分支和一个master分支,只需要一个提交。如果它是相关的,那么遥控器就在Github上。

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

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

1 个答案:

答案 0 :(得分:0)

  

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

你......不能那样做。如果您更改了提交的父级,那么您正在更改该提交,其中包含与之相关的所有内容(new sha1等)。根据指针指向的方式,将“父”视为“孩子”可能更有帮助。

听起来你正试图将你的历史记录缩减到一次提交。如果是这种情况,那么结账(呵呵)git checkout --orphan。一旦你完成了这个,就需要把你的主人指向它(在主人身上git reset --hard <new orphan branch>)并强制推动原点。

你的同胞所做的任何工作都需要在这位新主人之上重播; cherry-pick会在那里提供帮助。