除了最新的提交之外,如何删除Git中的所有提交?

时间:2012-12-27 12:05:11

标签: git github rebase

我希望通过删除所有以前的提交并保留最新的提交来清理我的提交历史记录。我怎么能用git做到这一点?我确实试过了

git rebase -i ..但这似乎以血液结束,我最终分离了我的脑袋。 git prune --expire似乎也无效。

所以,如果我有1到10的提交,我现在想跟我保持第10个。 所有这些都是本地的。因此,当我决定推动时,我只推动10。

1 个答案:

答案 0 :(得分:3)

该程序在the git book

中描述
  

Squashing Commits

     

还可以使用交互式变基工具进行一系列提交并将其压缩到单个提交中。该脚本在rebase消息中添加了有用的指令:

#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
  

如果您指定“squash”而不是“pick”或“edit”,Git会将更改和更改直接应用于它之前,并使您将提交消息合并在一起。因此,如果您想从这三个提交中进行单个提交,则可以使脚本如下所示:

pick f7f3f6d changed my name a bit
squash 310154e updated README formatting and added blame
squash a5f4a0d added cat-file

如果您不想将seceral提交压缩为一个,但实际上完全删除了提交,那么请执行脚本告诉您的操作:

# If you remove a line here THAT COMMIT WILL BE LOST.