Можно ли отменить коммиты? - PullRequest
7 голосов
/ 08 августа 2010

Предположим, у нас есть хранилище и 5 коммитов:

  • коммит 1
  • коммит 2
  • коммит 3
  • коммит 4
  • коммит 5

И теперь я понимаю, что коммиты 4 и 5 - плохая идея. Я хочу полностью удалить все изменения, зафиксированные в коммитах 4 и 5. Как это сделать?

Ответы [ 3 ]

6 голосов
/ 08 августа 2010

Если коммиты 4 и 5 находятся только в вашем хранилище и не были перенесены или вытянуты каким-либо другим хранилищем, вы можете просто:

git reset --hard SHA1_HASH_OF_COMMIT_3

Вы можете узнать хэш SHA1 коммита с помощью git log или использовать более продвинутые методы именования, см. git help rev-parse, в частности, раздел «УКАЗАНИЯ ПЕРЕСМОТРОВ».

Использование этой команды оставит коммиты 4 и 5 недоступными из кончика ветви.Тем не менее, коммиты не будут потеряны, так как эти коммиты хранятся в рефлоге ветки.Вы можете использовать git reflog для определения недоступного коммита.Восстановление можно затем выполнить с помощью другого git reset --hard.Эта страница здесь описывает все это довольно хорошо.

Рекомендуется регулярно запускать git gc;некоторые команды также делают это автоматически.По сути, это выполняет «служебную работу» с хранилищем, например «сжатие версий файлов (для уменьшения места на диске и повышения производительности) и удаление недоступных объектов».Недоступные объекты удаляются из хранилища через (по умолчанию) 30 дней.Это можно изменить с помощью опции конфигурации gc.reflogExpireUnreachable.

5 голосов
/ 08 августа 2010

git revert commit_hash

Отменяет данный коммит.Обратите внимание, что revert - это еще один коммит, который отбрасывает изменения из commit_hash, а не удаляет данный коммит из репозитория.

3 голосов
/ 08 августа 2010

Я бы, вероятно, создал новую ветку из коммита 3.

git checkout -b commit3

, а затем перебазировал мастер из этого коммита

http://git -scm.com / docs /git-rebase

конечно, вы используете ветки тем, чтобы отделять ваши ветки для разработчиков, пока вы не поймете, что это хорошая идея, верно?

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