当不是你最近的提交时如何压缩你的提交[重复]
Posted
技术标签:
【中文标题】当不是你最近的提交时如何压缩你的提交[重复]【英文标题】:How to squash your commits when not being your recent ones [duplicate] 【发布时间】:2017-06-12 02:06:16 【问题描述】:如果这些是您最近的提交,那么压缩您的提交似乎很容易 (Squash my last X commits together using Git)
但是,如果我想压缩我的 repo 中的一些不是最近提交的提交,比如 HEAD~3
到 HEAD~6
。
有没有办法做到这一点?
【问题讨论】:
答案和你引用的问题完全一样 你是对的@ChrisMaes,没有意识到,谢谢 【参考方案1】:这可以通过交互式变基来完成。
如果你在提交A
有分支master
,然后你创建了分支my-branch
并提交B
、C
、D
、E
和F
。您想将提交 B
、C
和 D
压缩到 B'
。
确保您当前的分支是my-branch
,并启动交互式变基:
git rebase -i master
这将打开您的编辑器,其中包含将要执行的提交列表。每行代表一个提交,该行的第一个单词表示要在该提交上执行的命令。将第一个提交 (B
) 保留为 pick
,并将接下来的两个提交 (C
和 D
) 的命令更改为 squash
。保存并关闭编辑器。
在 git 完成处理提交 B
、C
和 D
后,将打开一个新编辑器,其中包含新提交 B'
的提交消息。这将包含来自原始提交的提交消息的组合,但您可以将其更改为您想要的任何内容。一旦提交消息是您想要的,保存并关闭编辑器。
一旦 git 处理完分支 my-branch
上的其余提交,my-branch
上的提交将是 B'
、E
和 F
。
请注意,如果您没有推送您的提交,您应该只做一个 rebase。变基会改变你提交的哈希值,如果其他人已经拉取了原始提交,这将导致问题。
【讨论】:
那是干净的伙伴,谢谢【参考方案2】:git rebase -i HEAD~6
然后在交互式编辑器中将squash
(您可以缩写为s
)放在您要压缩的提交前面,并将其他的保留为pick
。
例子:
pick 043af87 message
s 8c0fa0e message
s b6c7116 message
pick c5d91a3 message
pick f20898f message
pick edcbad2 message
【讨论】:
【参考方案3】:如果你还没有发布分支,你可以重写它的历史而不会产生任何副作用。
假设历史是A-B-C-D-E-F-G-H-I
,目标是压缩C-D-E-F-G
。
git checkout -b squash_branch G
git reset C --soft
git commit
git cherry-pick H I
新的历史记录将是A-B-S-H'-I'
。
【讨论】:
以上是关于当不是你最近的提交时如何压缩你的提交[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何通过非交互式压缩除最近的提交之外的所有提交来减少膨胀的Git仓库的大小?
如何通过非交互方式压缩除最近提交之外的所有提交来减少臃肿的 Git 存储库的大小?
bootstrap中模态框提交表单成功后,如果不对网页进行刷新,当再次提交表单时会提交重复数据,求解决
将我所有的提交压缩为一个用于 GitHub 拉取请求 [重复]