Команда "git reset --hard" не удаляет ненужные коммиты - PullRequest
1 голос
/ 15 июня 2019

Я следую учебному пособию по Udemy, поэтому я скачал репозиторий с GitHub с 50-60 коммитами.

Теперь я хочу перейти к определенному коммиту, например, commit 16 и удалите коммиты, которые мне не нужны (в данном случае 17-50). Я абсолютно уверен, что мне не понадобятся коммиты, от которых я хочу избавиться.

Поэтому я сделал reset --hard certain_hash, который поместил голову на правильный коммит, однако другие ненужные коммиты (17 - 50) все еще там.

enter image description here

Как мне избавиться от ненужных коммитов?

Ответы [ 3 ]

3 голосов
/ 15 июня 2019

Если эти коммиты 17-50 не , на которые ссылаются какие-либо локальные или удаленные филиалы, , то они исчезнут.

В вашем случае они, вероятно, все еще , на которые ссылается origin/master:

  • git remote remove origin немного экстремально, особенно если вам нужно отодвинуться позже
  • Достаточно просто принудительно нажать (после сброса) (git push --force), чтобы обновить локальную и удаленную ветви отслеживания.

Введите git branch -a --contain 96e6c82, чтобы проверить, что вывод не пуст.

Вам потребуется, по крайней мере, git push --force, чтобы master включал только те коммиты, которые вы хотите.

1 голос
/ 15 июня 2019

Помните, что нормальный способ работы Git - просто ссылаться на некоторые отдельные коммиты как на "верх ветвей или тегов". Эти коммиты, в свою очередь, ссылаются на своих отцов, поэтому история строится.

Пока коммит ссылается на «что-то», он гарантированно никогда не исчезнет. Это «что-то» может быть тегом, веткой, другим коммитом или рефлогом данной ветки. Однако, когда его больше нет, Git позволит сборщику мусора очистить все, что ожидает, и больше не является полезным. Кроме того, прежде чем действительно что-то удалять, Git сначала будет соблюдать льготный период, обычно три месяца, прежде чем решить, что его действительно не стоит сохранять.

Таким образом, правильный ответ здесь будет следующим: « не заботятся об этих коммитах, они в конечном итоге сами исчезнут ».

Однако, если вы можете увидеть их в результате git log, как, кажется, показывает ваш скриншот, это либо потому, что вы просматриваете ветку, которая все еще ссылается на них, либо потому, что вы вызываете явная идентификация хеш-суммы данного коммита, даже если на него больше нет ссылок.

В первом случае, если вы действительно хотите удалить некоторые конкретные коммиты среди данной ветви, вам, вероятно, нужно перебазировать эту ветку, используя git rebase -i, чтобы указать, что должно быть сохранено. и выброшены.

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

1 голос
/ 15 июня 2019

Я думаю, что часть ответа VonC решает вашу проблему "... В вашем случае они, вероятно, все еще ссылаются на origin / master ..."

Просто отсоедините ссылку от пульта origin by git remote rm origin Тогда другие коммиты исчезнут.

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