E-r*_*ich 15 git git-merge squash
我将一个大项目的上游与我当地的git repo合并.在合并之前,我有一些易于阅读的历史,但在合并之后,我的回购中有大量的历史记录.我不需要上游回购的所有历史提交.
在我想保留的上游合并之后还有其他提交.如何在保持上游合并之后的提交的同时,将从上游合并的所有历史记录压缩到一个提交中?
E-r*_*ich 10
我最终使用的解决方案是手动重新创建历史记录.我这样做主要是因为我不想花太多时间寻找一个优雅的解决方案而且没有那么多的历史(大约30次提交我必须手动合并).
所以,在合并庞大的上游之前,我创建了一个分支:
git checkout -b remove-history-fix <commit ID before merge>
Run Code Online (Sandbox Code Playgroud)
然后使用该--squash选项重新合并上游.
git merge --squash <upstream tag>
Run Code Online (Sandbox Code Playgroud)
然后从旧分支(具有大量上游历史记录的分支)合并之后手动挑选提交.
git cherry-pick <commit ID>
Run Code Online (Sandbox Code Playgroud)
在所有这些提交合并到我的remove-history-fix分支之后,我删除了具有上游历史记录的分支.
git branch -D <upstream-history-branch>
Run Code Online (Sandbox Code Playgroud)
在使用此处找到的策略从master分支进行多次合并之后,我能够压榨几次提交:https : //stackoverflow.com/a/17141512/1388104
git checkout my-branch # The branch you want to squash
git branch -m my-branch-old # Change the name to something old
git checkout master # Checkout the master branch
git checkout -b my-branch # Create a new branch
git merge --squash my-branch-old # Get all the changes from your old branch
git commit # Create one new commit
Run Code Online (Sandbox Code Playgroud)
如果您需要将压缩的分支推送到先前已推送到的远程存储库,则必须强制执行更新。 git push origin my-branch -f