壁球git提交是多个分支的祖先

时间:2015-09-07 18:33:22

标签: git

我通过github克隆了一个现有的项目存储库,该存储库复制了所有提交历史记录和分支。我想从克隆项目的主分支中删除所有提交历史记录,并保留我一直在使用的分支的提交历史记录(参见图表)。该项目看起来像这样:

A [master]
\
  B [branchDevelop] ________
   \                        \
     C [branchFeature1]      D [branchFeature2]

我尝试过改造并压缩master中的提交但我一直遇到合并冲突。此外,如果我删除.git并重新初始化项目,我将松开我的分支。如何删除master的提交历史记录并保留我一直在处理的开发分支和提交?

2 个答案:

答案 0 :(得分:0)

首先,在新分支上创建一个提交,其内容与master相同,但没有master的历史记录:

git checkout --orphan new_master master
git commit -m'squashed'

警告: Severe history rewriting提前!

  • 准备好备份。
  • 不要希望你能够回到 原始遥控器或从中拉出或合并没有大麻烦!

然后使用git filter-branch重新定位branchDevelop及其功能分支:

git filter-branch \
    --parent-filter \
        "test \$GIT_COMMIT = $(git show -s master --format=%H) \
            && echo '-p $(git show -s new_master --format=%H)' \
            || cat" \
    --tag-name-filter "cat" \
    -- \
    branchDevelop branchFeature1 branchFeature2

最后,摆脱旧的master分支并将新的分支重命名为master

git branch -M new_master master

答案 1 :(得分:-1)

您可以将分支重命名为master吗?

git branch -M branchDevelop master

确保这是您想要做的。您可以使用强制推动来推动它:

git push -f origin master