Подтвердить что ты не робот

Git: Существует ли эквивалент hg-полосы?

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

Если это Mercurial, я уверен, что смогу исправить свою проблему с помощью hg strip, но я не могу найти такую ​​команду в Git.

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

4b9b3361

Ответ 1

Существует несколько команд, которые вам нужно выполнить. Первое, как говорили другие люди, - это git reset. Вам нужно будет найти набор изменений непосредственно перед тем, который вы хотите избавиться, и используйте

git reset --hard <changeset>

Это изменит текущую ветвь ветки (и индекс), чтобы указать на этот набор изменений, но "плохой" набор изменений все еще присутствует. Он не будет включен, если вы нажмете, но он будет включен, если вы клонируете свой локальный репозиторий, и на него все еще можно ссылаться в командах log и checkout.

Предполагая, что нет других ссылок на него (например, последующие коммиты, теги и т.д.), вы можете очистить его:

git gc --prune=now

Я нашел эту команду благодаря http://help.github.com/remove-sensitive-data/, в которой также упоминается, что (как и с hg strip), если вы нажали эту кнопку "bad" в удаленное местоположение, вы не можете удалить его с помощью обычных команд git, но вам нужно предпринять дополнительные шаги для удаления и воссоздания репозитория на сервере и очистки всех кэшированных страниц.

Ответ 2

Как сказал larsks, git reset --hard может помочь вам вернуться к истории, которую вы хотели:

  • Найдите правильное значение ша, которое вы хотите вернуть, используя git log.
  • Запустите git reset --hard sha, чтобы вернуться назад.

Ответ 3

Попробуйте прочитать документацию для git reset. Я не так хорошо знаком с Mercurial, но если я правильно понимаю этот документ, git reset позволит вам сделать то же самое - что, reset ваш репозиторий возвращается к предыдущей точке истории.

В этом документе подробно обсуждается команда reset, а этот вкратце обсуждает различные варианты исправления ошибок.