Удалить посторонние коммиты из репозитория git - PullRequest
2 голосов
/ 24 мая 2019

У меня есть репозиторий, который содержит кучу коммитов из другого проекта и которых нет ни в одной ветви текущего проекта.Они просто появляются в истории, связаны друг с другом, но не связаны ни с одной веткой в ​​проекте.

Так что, если я выполню git branch --contains <commit hash>, он ничего не возвращает.

(Я полагаю, что это произошло во время внесения некоторых изменений в удаленный репозиторий gitolite3 и выборки, когда его состояние было в ошибке).

Я хотел бы удалить их из базы данных коммитов, так как онине принадлежит здесь вообще.

Как я могу это сделать?

Я пробовал git prune до и после git reflog expire --expire=now --expire-unreachable=now --all, но он не удаляет их.Я также пробовал git gc, но это тоже не помогло.

Это похоже на Полное удаление коммита из базы данных git , но я не могу найти ничего в reflog или веткессылаясь на эти коммиты, которые не позволят черносливу удалить их.Я ненавижу просто идти и удалять объекты из базы данных, что кажется плохим способом сделать что-либо.

1 Ответ

2 голосов
/ 24 мая 2019

Другая вещь, которая может заставить git gc не удалять коммит, - это если есть теги, ссылающиеся на него или цепочка, в которой он содержится.

git tag --list # shows the tags
git tag -d <extraneous tag> # removes any such tags
git gc # then deletes the extraneous commits

Это было предложено в соответствующем сообщении Удалить коммиты, которые не связаны с веткой

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