Как git revert
используется?
Это может звучать как повторяющийся вопрос, но когда люди задают его, ответ часто звучит git reset
так: « Вернуть к фиксации» с помощью хэша SHA в Git?
Затем, когда кто-то спрашивает, как использовать, git reset
люди отвечают, что вы должны использовать git revert
согласно Git - как откатиться
Прежде чем вы это узнаете, появилось 8 разных людей со своими уникальными способами спасти задницу ОП, и все они выше вашей головы.
Итак, давайте попробуем придерживаться брифинга и написать руководство для чайников git revert
.
Сценарий: вы дважды обещали стать мастером, и это плохо. Вы подтолкнули, и у других людей есть ваши плохие изменения.
Вы хотите отменить это. Это не то, что вы можете вручную отменить в коде, скажем, какой-то мастер или менеджер пакетов изменили кучу вещей повсюду - вы просто хотите вернуть все как было.
Это и есть контроль версий. Я уверен, что это легко.
Хорошо, собираешься использовать, git revert
но как?
И после бега git revert
нужно ли делать что-то еще после? Вы должны зафиксировать изменения, которые были сделаны, или сделать возврат непосредственно в репо, или что?
Очевидно, вам нужно будет подтолкнуть еще раз и, вероятно, объявить о своей готовности команде.
git revert -n <commitToRevet>
илиgit revert --no-commit <commitToRevet>
Используйте git revert так:
git revert <insert bad commit hash here>
git revert
создает новую фиксацию с отмененными изменениями.git reset
стирает вашу историю git вместо того, чтобы делать новую фиксацию.Последующие шаги такие же, как и при любом другом коммите.
источник
Причина
reset
и , какrevert
правило , придумать много в одних и тех же разговоров , потому что разные системы управления версиями используют их для обозначения разных вещей.В частности, люди, которые привыкли к SVN или P4 и хотят выбросить незафиксированные изменения в файл, часто обращаются к ним,
revert
прежде чем им скажут, что они действительно хотятreset
.Аналогично,
revert
эквивалент в других VCS часто называетсяrollback
или что-то подобное, но «откат» также может означать «Я хочу полностью отменить несколько последних коммитов», что подходит,reset
но не подходитrevert
. Итак, возникает большая путаница, когда люди знают, что они хотят сделать, но не понимают, какую команду они должны использовать для этого.Что касается ваших реальных вопросов о возврате ...
git revert first-bad-commit..last-bad-commit
По умолчанию
git revert
запрашивает сообщение о фиксации, а затем фиксирует результаты. Это можно изменить. Цитирую страницу руководства :В частности, по умолчанию он создает новую фиксацию для каждой отменяемой фиксации. Вы можете использовать
revert --no-commit
для создания изменений, отменяя их все, не фиксируя эти изменения как отдельные коммиты, а затем фиксировать на досуге.источник
git revert first-bad-commit..last-bad-commit
: Думаю так и должно бытьgit revert parent-of-first-bad-commit..last-bad-commit
.Вопрос довольно старый, но откат все еще сбивает с толку людей (таких как я)
Как новичок, после некоторых проб и ошибок (больше ошибок, чем проб) у меня есть важный момент:
git revert
требует идентификатор коммита, который вы хотите удалить, сохраняя его в своей историиgit reset
требует фиксации, которую вы хотите сохранить , и впоследствии удалит все, что будет после этого, из истории.То есть, если вы используете
revert
с первым идентификатором фиксации, вы попадете в пустой каталог и дополнительную фиксацию в истории, в то время как при сбросе ваш каталог будет ... возвращен обратно к исходной фиксации, и ваша история будет как если бы последняя фиксация (и) никогда не происходила.Чтобы быть еще более понятным, с журналом вроде этого:
Используя
git revert cb76ee4
волю по умолчанию принести свои файлы обратно в 01b56c6 и добавит еще совершить свою историю:git reset 01b56c6
вместо этого вернет ваши файлы на 01b56c6 и очистит любой другой коммит после этого из вашей истории:Я знаю, что это «основа», но меня это сбивало с толку, запустив
revert
первый идентификатор ('первая фиксация'), я ожидал найти свои исходные файлы, потребовалось некоторое время, чтобы понять, что если вам понадобятся ваши файлы обратно в качестве «первой фиксации» вам нужно использовать следующий идентификатор.источник
Я отменил несколько коммитов, выполнив git revert commit id, например:
Затем мне было предложено зафиксировать откат (точно так же, как при запуске git commit). Моя терминальная программа по умолчанию - Vim, поэтому я запустил:
Наконец, я отправил изменение в репозиторий с помощью:
источник