【发布时间】:2018-07-24 11:22:30
【问题描述】:
请注意:这个问题与Squash my last X commits together using Git 不同,因为我们不希望将最后一个 X 提交一起压缩成一个提交 - 相反,我们希望将初始提交合并为一个提交并以自动方式保留最后四个提交/代码状态(无需手动选择提交) .
我们正在使用 git 备份/记录对文件数据存储的更改,该更改使用内部托管的 GitLab 服务器,其存储库包含一些非常大的文件。
我们想合并早期的冗余提交,这些提交不再需要减少 repo 的大小,但 保持当前代码状态和最后四个提交为备份以防我们需要将数据存储恢复到以前的提交。
在自动化脚本中推荐哪些命令会改变以下 git 历史记录:
0 aabbcc Initial commit
1 aabbdd First backup
2 aabbee Second backup
3 aabbff Third backup
4 aabbgg Fourth backup
5 aabbhh Fifth backup
6 aabbii Sixth backup
7 aabbjj Seventh backup (current code state)
变成以下不丢失当前代码状态:
4 aabbgg Initial commit -> Fourth backup (consolidated)
5 aabbhh Fifth backup
6 aabbii Sixth backup
7 aabbjj Seventh backup (current code state)
【问题讨论】:
-
为什么你认为你可以在不改变代码状态的情况下删除前 4 个提交?这是不可能的,很有可能。
-
@TimBiegeleisen 我们需要将所有以前的提交合并到一个提交中,但保留最后四个提交.. 这对于 git 来说是不可能的吗?
-
@TimBiegeleisen 这个问题与标记为重复的问题不同,因为我们希望将我们的初始提交合并到一个提交并自动保持最后四个提交,而建议的重复问题的答案解释了如何压缩最后一次提交而不是初始提交,并且需要手动用户输入。
-
git checkout aabbgg && git reset --soft aabbcc^ && git commit -m "Initial commit -> Fourth backup (consolidated)" && git tag new_base && git checkout -b consolidated master && git rebase --onto new_base aabbgg -
@Steve 我之前提到的重复链接或 Serge 的软重置方法基本上是压缩提交的两种方法。但是,一般来说,两者都可能需要人工干预。