Удалить поддельный второй корень в git-репо - PullRequest
0 голосов
/ 08 января 2019

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

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

Как мне это удалить? Как мне найти, кто это совершил? Коммит является частью репо https://github.com/thephpleague/omnipay-sagepay, над которым работают несколько моих коллег, но это совершенно не связано с данным репо.

Фиксация указывает на коммит в 2016 году. Наличие коммита в нашем репо за последние 30 дней.

Sourcetree view of foreign root

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Чтобы найти все ссылки на новый корень,

git for-each-ref --contains=$thenewroot

Чтобы удалить историю из репозитория, самый простой способ (git будет очищать объекты по мере их старения), просто удалите ссылки на него:

git for-each-ref --contains=$thenewroot --format='delete %(refname)' \
| git update-ref --stdin

и самый простой способ «родного мерзавца» вычистить все объекты, на которые нет ссылок, из репозитория. Прямо сейчас, если вы не можете дождаться старения, сделайте полное повторное амнезиакское повторное перепечатывание:

git repack -ad

но обратите внимание, что клоны не получают объекты, на которые нет ссылок, так что простое удаление неверных ссылок из вашего опубликованного репо уже означает, что никакие будущие клоны из этого репо не получат объекты в нежелательной истории.

0 голосов
/ 08 января 2019

Звучит так, будто кто-то допустил ошибку и отправил некоторый код в неправильный репозиторий. Сам Git не будет записывать, кто нажал, но некоторые серверные программы на основе git (такие как gitlab) могут вести отдельный журнал.

Git не позволяет полностью удалить коммиты из репозитория, как только они были выдвинуты. Но обычно это не проблема. вы только обычно заботитесь об истории коммитов, на которую ссылается ветка или тег.

В вашем случае у вас все еще есть теги, указывающие на нежелательную историю.

Во-первых удалите все теги, указывающие на нежелательную историю, и дважды проверьте наличие нежелательных веток, удалив их тоже. Убедитесь, что вы удалили как теги, так и ветви в удаленном хранилище, а не только в локальную копию.

Тогда Если вы обеспокоены тем, что история фиксации вообще не должна храниться в вашем хранилище (например, она содержит конфиденциальные данные), вам необходимо полностью очистить неиспользуемую историю.

Я считаю это можно сделать с помощью git gc --aggressive. Смотрите здесь

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