在选择进行编辑的 git rebase 中以交互方式删除提交
Deleting a commit interactively in git rebase that was selected for editing
我准备发布一个存储库,需要从其历史记录中完全删除某些内部信息。这些数据可以在我必须手动 check/prune 的各种文件中。请注意,不应删除整个文件,只删除某些内容。
当我做 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
将删除提交。
git rebase --skip
不会删除此时已应用的提交。
我准备发布一个存储库,需要从其历史记录中完全删除某些内部信息。这些数据可以在我必须手动 check/prune 的各种文件中。请注意,不应删除整个文件,只删除某些内容。
当我做 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
将删除提交。
git rebase --skip
不会删除此时已应用的提交。