首页 > 解决方案 > 在 git rebase 中以交互方式删除选择进行编辑的提交

问题描述

我准备了一个 repo 以供发布,并且需要从其历史记录中完全删除某些内部信息。这些数据可以在我必须手动检查/修剪的各种文件中。请注意,不应该删除整个文件,只删除某些内容。

当我这样做时,我可以将 (a)可能需要修改git rebase -i --root的所有提交标记为以及 (b) 需要完全修改为. (注意:要审查的提交列表不会太长,并且是通过使用选择的。)在筛选类型 (a) 的提交时,我可能会发现一个实际上需要完全删除的提交。为此,我尝试了,但令我惊讶的是,这仍然使提交到位。editdropgit log --stat | grep 'commit\|name1\|name2\|...'rebase --skip

如何删除我最初git rebase选择的提交?edit

例子:

$ git init
$ for COM in A B C; do touch $COM; git add  $COM; git commit -m "add $COM"; done
$ git rebase -i --root
<mark all as 'edit'>

<modify file and change commit>
$ echo A > A; git add A; git rebase --continue

<commit needs to go away>
$ git rebase --skip

<modify file and change commit>
$ echo C > C; git add C; git rebase --continue

在此之后文件B仍然存在。

标签: gitgit-rebase

解决方案


而不是git rebase --skip,使用

git reset --hard HEAD^
git rebase --continue

git reset删除提交。
git rebase --skip不会删除此时已应用的提交。


推荐阅读