我使用the subtree merge strategy将外部库合并到我的项目中。我没有将--squash选项传递给'git merge',所以我现在拥有整个库历史(这是巨大的)膨胀存储库。我如何追溯压缩合并?
我的情况是:
Z--Y--..--B--A
\
D---E---F---G master
我想:
D---E---F---G master
其中E是包含合并的提交。
我想解决方案将涉及'git rebase',但我不确定如何在这种情况下正确使用它。
答案 0 :(得分:2)
请记住,如果你已经在master中发布了E或更高版本的提交到远程,那么就不要对它们进行rebase,因为这会破坏其他代码,你也需要手动修复它们的存储库。
Rebase创建了新版本,它无法神奇地修改现有版本(这就是它使用SHA1的原因,因此您确定您的提交包含生成此特定SHA1的内容并且未进行修改)
但是如果你准备好了,那就继续我的例子。
git merge --squash library
; git commit
git checkout master
git rebase -i -p --onto lib-squash <sha1 old merge commit>
git branch -D library
和git branch -d lib-squash
这为您留下了干净的历史,但您只需重写历史记录,您需要使用--force标志,然后每个人都需要修复其存储库:
git fetch
git checkout master
git reset --hard origin/master
,假设您没有远程存储库中的其他本地提交不幸的是,我没有找到关于在不影响未来提交的情况下分离历史提交的文章。
答案 1 :(得分:1)
Rebase应该帮助你。 This article应该给你足够的指针来解决它