Откат к старой фиксации Git в публичном РЕПО
Как я могу вернуться к определенной фиксации в git?
лучший ответ, который кто-то мог дать мне, был использовать git revert X раз, пока я не достигну желаемой фиксации.
Итак, предположим, что я хочу вернуться к фиксации, которая составляет 20 коммитов, мне нужно будет запустить ее 20 раз.
есть ли более простой способ сделать это?
Я не могу сбросить, потому что этот репозиторий является публичной.
8 ответов:
попробуйте это:
git checkout [revision] .здесь
[revision]- это хэш фиксации (например:12345678901234567890123456789012345678ab).не забудьте
.в конце концов, очень важно. Это позволит применить изменения ко всему дереву. Вы должны выполнить эту команду в корне проекта git. Если вы находитесь в любом подкаталоге, то эта команда изменяет только файлы в текущем каталоге. Тогда совершайте, и вы должны быть хорошими.вы можете отменить это,
git reset --hardчто будет удалить все изменения из рабочего каталога и промежуточной области.
для отката к определенной ревизии:
git reset --hard commit_shaдля отката 10 коммитов назад:
git reset --hard HEAD~10вы можете использовать "git revert", как в следующем сообщении, Если вы не хотите переписывать историю
ну, я думаю, вопрос в том, что вы подразумеваете под "откат"? Если вы не можете
resetпотому что это публично, и вы хотите сохранить историю фиксации нетронутой, вы имеете в виду, что вы просто хотите, чтобы ваша рабочая копия отражала конкретную фиксацию? Используйтеgit checkoutи commit хэш.Edit: как было указано в комментариях, используя
git checkoutбез указания ветви вы останетесь в состоянии" нет ветви". Используйтеgit checkout <commit> -b <branchname>для оформления заказа в филиал, илиgit checkout <commit> .для проверки в текущий отделение.
оригинальный плакат гласит:
лучший ответ, который кто-то мог дать мне, был использовать
git revertX раз, пока я достичь желаемой фиксации.Итак, предположим, что я хочу вернуться к фиксации, которая составляет 20 коммитов, у меня есть чтобы запустить его 20 раз.
есть ли более простой способ сделать это?
Я не могу использовать сброс, потому что это РЕПО является общедоступным.
это не обязательно использовать
git revertX раз.git revertможет принять a диапазон фиксации в качестве аргумента, поэтому вам нужно использовать его только один раз, чтобы вернуть диапазон разумеется. например, если вы хотите вернуть последние 20 коммитов:git revert --no-edit HEAD~20..диапазон фиксации
HEAD~20..сокращенноHEAD~20..HEAD, и означает "начать с 20е родитель головного коммита, и вернуть все коммиты после него до головы".это вернет последние 20 коммитов,при условии, что ни один из них объединить совершает. если есть коммиты слияния, то вы не можете вернуть их все в одной команде, вам нужно будет вернуть их по отдельности с
git revert -m 1 <merge-commit>обратите внимание также, что я протестировал использование диапазона с
git revertиспользование git версии 1.9.0. если вы используете старую версию git, используя диапазон сgit revertможет или не может работать.
git revertЛучше, Чемgit checkoutобратите внимание, что в отличие от это ответить говорит, чтобы использовать
git checkout,git revertфактически удалит все файлы, которые были добавлены в любой из коммитов, которые вы возвращение, что делает это правильным способом возврата ряда изменений.документация
Шаг 1: fetch список коммитов:
git logвы получите список как в этом примере:
[Comp:Folder User$ git log commit 54b11d42e12dc6e9f070a8b5095a4492216d5320 Author: author <[email protected]> Date: Fri Jul 8 23:42:22 2016 +0300 This is last commit message commit fd6cb176297acca4dbc69d15d6b7f78a2463482f Author: author <[email protected]> Date: Fri Jun 24 20:20:24 2016 +0300 This is previous commit message commit ab0de062136da650ffc27cfb57febac8efb84b8d Author: author <[email protected]> Date: Thu Jun 23 00:41:55 2016 +0300 This is previous previous commit message ...Шаг 2: скопируйте необходимый хэш фиксации и вставьте его для проверки:
git checkout fd6cb176297acca4dbc69d15d6b7f78a2463482fвот и все.
git read-tree -um @ $commit_to_revert_toбудет делать это. Это "git checkout", но без обновления головы.
вы можете достичь того же эффекта с
git checkout $commit_to_revert_to git reset --soft @{1}Если вы предпочитаете нанизывать команды удобства вместе.
Они оставляют вас с вашим рабочим деревом и индексом в нужном состоянии, вы можете просто
git commitдо конца.
Я не уверен, что изменилось, но я не могу проверить конкретную фиксацию без опции
--detach. Полная команда, которая работала на меня, была:git checkout --detach [commit hash]чтобы вернуться из отстраненного состояния, мне пришлось проверить мой местный филиал:
git checkout master
допустим, вы работаете над проектом и через день или около того. Вы замечаете, что одна функция все еще дает вам ошибки. Но вы не знаете, какое изменение вы сделали, что вызвало ошибку. Таким образом, вы должны ловить предыдущие рабочие коммиты. Чтобы вернуться к определенной фиксации:
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 .хорошо, так что фиксация работает для вас. Больше никаких ошибок. Вы точно определили проблему. Теперь вы можете вернуться к последней фиксации:
git checkout 792d9294f652d753514dc2033a04d742decb82a5 .и проверить конкретный файл, прежде чем он вызвал ошибку (в моем случае я использую пример файле.lock):
git checkout 8a0fe5191b7dfc6a81833bfb61220d7204e6b0a9 -- /projects/myproject/Gemfile.lockи это один из способов обработки ошибок, которые вы создали в фиксации, не осознавая ошибок до более позднего времени.
Comments