【发布时间】:2017-03-23 20:18:45
【问题描述】:
我正在尝试找出如何从一系列提交中压缩 Git 中的提交。我的具体情况是我分叉了一个存储库并在其上添加了几个工作提交;但是我想将所有分叉的 repo 提交压缩为一个提交以保持历史记录干净。
示例
7e8d7f7 - (HEAD) My commit
809fc8b - My commit
e04692c - Forked repo's commit \
2674323 - Forked repo's commit > Turn these into a single commit
4e79731 - Forked repo's initial commit /
这是我尝试过的方法
- 通过
git rev-list --max-parents=0 HEAD获取初始提交的SHA,以获得我想要压缩的范围的下限 (Source) - 通过
git checkout <upper bound commit>将 HEAD 分离到范围的上限 - 软重置到下限并提交(替代
git rebase -i):git reset --soft <lower bound commit> && git commit(Source) - 合并到
master:git merge --no-ff master
我最终以这种方式得到了大量的合并冲突。我觉得通过我遇到的命令可以实现我想要实现的目标,但是我不知道如何将它们串在一起以使其工作。
【问题讨论】:
-
这听起来像是一个特别不明智的解决方案。您是否尝试复制并粘贴代码并在那里创建一个新的 git 存储库?因为它具有相同的效果。
-
请解释您为什么要这样做?很明显,您会遇到合并冲突。如果您更改以前的提交,那么您将创建一个全新的存储库。提供的所有答案都会给您合并冲突。你想要“保持历史干净”的内在动机是什么?
-
@Unapiedra 我分叉了一个样板项目并在它之上做了一些工作,但我没有在开始工作之前删除
.git文件夹,而是继续致力于分叉的回购。是的,我理解大家的顾虑;除非您知道自己在做什么,否则请不要尝试这样做。