我准备发布一个回购协议,并且需要从其历史记录中完全删除某些内部信息。这些数据可以放在我必须手动检查/修剪的各种文件中。请注意,不是某些完整的文件应该删除,只是某些内容。
[当我执行git rebase -i --root
时,我可以将(a)可能需要修改的所有提交标记为edit
,将(b)需要完全进行的那些提交标记为drop
。 (注意:要审核的提交列表不太长,可以使用git log --stat | grep 'commit\|name1\|name2\|...'
进行访问。)在筛选类型为(a)的提交时,我可能会发现实际上需要完全删除的提交。为此,我尝试了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
,使用
git rebase --skip
git reset --hard HEAD^
git rebase --continue
将删除提交。git reset
不会删除当时已应用的提交。