我正在使用Github上的git仓库。由于库中存在许多提交和日志,现在我需要删除特定用户(比如User1)的所有提交记录。我该如何删除他的所有提交记录?
是的。git filter-branch
的 man 页面提供了一个现成的例子:这会从工作树中删除所有来自 "Darl McBribe" 的提交记录(在您的情况下,这将是 User1
)。
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_NAME" = "Darl McBribe" ];
then
skip_commit "$@";
else
git commit-tree "$@";
fi' HEAD
函数skip_commit
定义如下:
skip_commit()
{
shift;
while [ -n "$1" ];
do
shift;
map "$1";
shift;
done;
}
但是,当你改变代码库历史记录时,就像往常一样:如果有人在你修改之前从代码库拉取过代码,他会遇到麻烦。
可以使用git filter-branch
实现,但是在这样做之前你需要考虑其影响。特别是当其他提交基于需要被删除的用户的提交时。
如果只有很少的提交需要筛选,则应使用cherry pick和rebase。