我正在使用github的git存储库。使用存储库中的所有提交和日志,现在我需要删除特定用户(例如User1)的所有提交。如何删除他的所有提交?
答案 0 :(得分:7)
是。 git filter-branch
的手册页提供了一个现成的示例:这将从工作树中删除“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;
}
但是,一如既往地改变您的回购历史记录:如果有人在您修改回购之前撤回回购,he'll be in trouble。
答案 1 :(得分:2)
是的,您可以使用git filter-branch
执行此操作,但您必须考虑这样做的含义。特别是当其他提交基于必须删除的用户提交时。
当只有少数提交需要过滤时,你应该使用cherry pick和rebase。