我正在准备发布一份代码库,需要从历史记录中完全删除某些内部信息。这些数据可能存在于各种文件中,我必须手动检查和修剪。请注意,不应该删除整个文件,只需删除特定内容。
当我执行 git rebase -i --root
时,我可以将所有可能需要修改的提交标记为 edit
,并将那些需要完全删除的提交标记为 drop
。(注意:要审查的提交列表不太长,是通过使用 git log --stat | grep 'commit\|name1\|name2\|...'
获得的。)在筛选类型为 (a) 的提交时,我可能会发现其中一个实际上需要完全删除。对于这种情况,我尝试了 rebase --skip
,但令我惊讶的是,它仍然保留了该提交。
我如何在最初选择为 edit
的提交期间,在 git rebase
过程中删除一个提交?
示例:
$ 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
仍然存在。
git reset --hard HEAD~1
,然后修订版本就消失了... _但是_我会认为以那种方式重置也会清除rebase过程... 这是一个给torek的问题。也许可以通过git reset --soft HEAD~1
,然后清理树,然后恢复?有趣的问题。我会点赞它。 - eftshift0