在 Git 中,我可以使用交互式 rebase 来重写历史记录。这很棒,因为在我的特性分支中,我会使用大量部分工作的代码进行多次提交,以便探索不同的重构和完成方式。
在将分支 rebase 或合并到主分支之前,我希望将许多提交压缩在一起。
按照从上到下的顺序列出了一些虚构的提交。
1. Initial commit on feature branch "Automatic coffee maker UI"
2. Add hot chocolate as product
3. Add tea as product. Products are now generic
4. Create in memory data store for adapter tests
5. Cry because I can't get entity framework to create a composite key. Integration tests broken.
6. Implemented composite key!!
7. All tests green and feature done!
假设我想保留提交3、4和7。
使用rebase,我想要“压缩”提交记录:
- 1和2合并为3。 - 4不变。 - 5和6合并为7。
在交互式rebase中,最好按以下操作:
1. squash
2. squash
3. pick (contains the work of 1 & 2)
4. pick
5. squash
6. squash
7. pick (contains the work of 5 & 6)
但这是错误的,因为压缩合并会将一个提交与其前一个提交合并。我不知道如何使其向前压缩。
我是否太固执了,应该接受这种方法行不通(我宁愿让它工作),还是有办法实现这一点?
我正在使用以下命令:
git checkout My-feature-branch
git rebase master -i
然后我正在编辑出现的提交列表,并尝试通过保存文件和编辑器来完成它,这通常对我有用。
squash
命令会完全符合你的要求;将 1 和 2 合并为 3,将 5 和 6 合并为 7。剩下的将是(表面上)提交记录 3、4 和 7。你是否在使用这些命令时遇到了问题?请注意,如果你有一个可以重置回去的远程存储库,那么你可以在本地存储库上尝试这些命令。 - Makoto