Можно ли удалить все коммиты конкретного пользователя? - PullRequest
6 голосов
/ 17 августа 2011

Я использую git-репозиторий с github.Со всеми коммитами и журналами, которые у меня есть в репозитории, теперь мне нужно удалить все коммиты от конкретного пользователя (скажем, User1).Как мне удалить все его коммиты?

Ответы [ 2 ]

7 голосов
/ 17 августа 2011

Да.Страница man 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;
}

Но, как всегда, при изменении истории вашего репо: если кто-то вытащил репо до того, как вы его изменили, у него будут проблемы .

2 голосов
/ 17 августа 2011

Да, вы можете сделать это с git filter-branch, но при этом вам придется учитывать последствия.Особенно, когда другие коммиты основаны на коммитах пользователя, который должен быть удален.

Когда есть только несколько коммитов, которые нужно отфильтровать, тогда вы должны использовать cherry pick и rebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...