Откат к старой фиксации Git в публичном РЕПО



Как я могу вернуться к определенной фиксации в git?



лучший ответ, который кто-то мог дать мне, был использовать git revert X раз, пока я не достигну желаемой фиксации.



Итак, предположим, что я хочу вернуться к фиксации, которая составляет 20 коммитов, мне нужно будет запустить ее 20 раз.



есть ли более простой способ сделать это?



Я не могу сбросить, потому что этот репозиторий является публичной.

692   8  

8 ответов:

попробуйте это:

git checkout [revision] .

здесь [revision] - это хэш фиксации (например:12345678901234567890123456789012345678ab).

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

вы можете отменить это,

git reset --hard 

что будет удалить все изменения из рабочего каталога и промежуточной области.

для отката к определенной ревизии:

git reset --hard commit_sha

для отката 10 коммитов назад:

git reset --hard HEAD~10

вы можете использовать "git revert", как в следующем сообщении, Если вы не хотите переписывать историю

как вернуть репозиторий Git к предыдущей фиксации?

ну, я думаю, вопрос в том, что вы подразумеваете под "откат"? Если вы не можете reset потому что это публично, и вы хотите сохранить историю фиксации нетронутой, вы имеете в виду, что вы просто хотите, чтобы ваша рабочая копия отражала конкретную фиксацию? Используйте git checkout и commit хэш.

Edit: как было указано в комментариях, используя git checkout без указания ветви вы останетесь в состоянии" нет ветви". Используйте git checkout <commit> -b <branchname> для оформления заказа в филиал, или git checkout <commit> . для проверки в текущий отделение.

оригинальный плакат гласит:

лучший ответ, который кто-то мог дать мне, был использовать git revert X раз, пока я достичь желаемой фиксации.

Итак, предположим, что я хочу вернуться к фиксации, которая составляет 20 коммитов, у меня есть чтобы запустить его 20 раз.

есть ли более простой способ сделать это?

Я не могу использовать сброс, потому что это РЕПО является общедоступным.

это не обязательно использовать git revert X раз. 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

    Ничего не найдено.