Git: есть ли эквивалент hg strip? - PullRequest
22 голосов
/ 31 марта 2012

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

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

Спасибо за любые ваши предложения.

Ответы [ 3 ]

28 голосов
/ 29 апреля 2012

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

git reset --hard <changeset>

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

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

git gc --prune=now

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

4 голосов
/ 31 марта 2012

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

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

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

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

...