2012-03-31 2 views
21

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

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

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

ответ

26

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

git reset --hard <changeset> 

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

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

git gc --prune=now 

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

2

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

This document подробно обсуждает команду reset, а this one кратко обсуждает различные варианты исправления ошибок.

4

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

  1. Найти правильное значение ша вы хотите вернуться к использованию git log.
  2. Запуск git reset --hard sha для возврата назад.
Смежные вопросы