Откат от старого Git фиксации в публичном репо
Как я могу вернуться к конкретному фиксации в git?
Лучший ответ, который кто-то мог мне дать, - это использовать git revert
X раз, пока не достиг желаемого коммита.
Итак, позвольте сказать, что я хочу вернуться к фиксации, что 20 коммитов, я должен был запустить его 20 раз.
Есть ли более простой способ сделать это?
Я не могу использовать reset, потому что этот репозиторий общедоступен.
Ответы
Ответ 1
Попробуй это:
git checkout [revision] .
где [revision]
- хеш фиксации (например: 12345678901234567890123456789012345678ab
).
Не забывайте .
в конце, очень важно. Это применит изменения ко всему дереву. Вы должны выполнить эту команду в корне проекта проекта git. Если вы находитесь в любом подкаталоге, эта команда только изменяет файлы в текущем каталоге. Затем совершите, и вы должны быть хорошими.
Вы можете отменить это
git reset --hard
который удалит все изменения из рабочего каталога и промежуточной области.
Ответ 2
Откат к конкретному фиксации:
git reset --hard commit_sha
Откат 10 завершает работу:
git reset --hard HEAD~10
Вы можете использовать "git revert", как в следующем сообщении, если вы не хотите переписывать историю
Как вернуть репозиторий Git на предыдущую фиксацию?
Ответ 3
Ну, я думаю, вопрос в том, что вы подразумеваете под "откатом"? Если вы не можете reset
, потому что это общедоступно, и вы хотите сохранить историю фиксации неповрежденной, вы имеете в виду, что просто хотите, чтобы ваша рабочая копия отражала конкретную фиксацию? Используйте git checkout
и хеш фиксации.
Изменить: как было указано в комментариях, использование git checkout
без указания ветки приведет вас к состоянию "без ветвления". Используйте git checkout <commit> -b <branchname>
для проверки в ветке или git checkout <commit> .
для проверки в текущей ветке.
Ответ 4
Оригинальный плакат гласит:
Лучший ответ, который кто-то мог мне дать, - использовать git revert
X раз, пока я не достиг желаемого фиксации.
Итак, позвольте сказать, что я хочу вернуться к фиксации, которая составляет 20 коммитов, мне придется запускать ее 20 раз.
Есть ли более простой способ сделать это?
Я не могу использовать reset, потому что это репо является общедоступным.
Не нужно использовать git revert
X раз. git revert
может принимать диапазон фиксации в качестве аргумента, поэтому вам нужно использовать его только один раз, чтобы вернуть диапазон коммитов. Например, если вы хотите вернуть последние 20 коммитов:
git revert --no-edit HEAD~20..
Диапазон фиксации HEAD~20..
является коротким для HEAD~20..HEAD
и означает "начать с 20- го родителя фиксации HEAD и вернуть все фиксации после него до HEAD".
Это вернет, что последние 20 коммитов, считая, что ни одно из них не является коммитом. Если есть коммиты слияния, то вы не можете вернуть их все в одной команде, вам нужно будет отменить их индивидуально с помощью
git revert -m 1 <merge-commit>
Обратите также внимание на то, что я тестировал использование диапазона с git revert
с помощью git версии 1.9.0. Если вы используете более старую версию git, использование диапазона с git revert
может или не может работать.
git revert
Лучше, чем git checkout
Обратите внимание, что в отличие от этого ответа, который говорит, что использовать git checkout
, git revert
фактически удалит любые файлы, которые были добавлены в любой из коммитов, которые вы возвращаете, что делает это правильным способом для возврата диапазона изменений.
Документация
Ответ 5
Шаг 1: отображает список коммитов:
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
Что все.
Ответ 6
git read-tree -um @ $commit_to_revert_to
сделает это. Это "git checkout", но без обновления HEAD.
Вы можете добиться того же эффекта с помощью
git checkout $commit_to_revert_to
git reset --soft @{1}
если вы предпочитаете объединять удобные команды вместе.
Они оставляют вас с вашим worktree и индексом в желаемом состоянии, вы можете просто git commit
завершить.
Ответ 7
Я не уверен, что изменилось, но я не могу проверить конкретную фиксацию без опции --detach
. Полная команда, которая работала для меня, была:
git checkout --detach [commit hash]
Чтобы вернуться из отсоединенного состояния, я должен был проверить свою локальную ветку: git checkout master
Ответ 8
Я думаю, что понимаю ваши вопросы, вот что я нашел для его решения. и нет никакого GUI-решения, вы можете использовать команду только для ее решения, и это очень просто.
Шаг 1: создайте тег старого коммита, который вы хотите вернуться.
как тег v2.0
Шаг 2: git checkout v2.0
вот он, теперь ваш HEAD указывает на 'v2.0' commit, но мастер все еще указывает на последнюю фиксацию.
C:\Program Files\ Git\doc\Git\html\git -checkout.html этот документ может помочь вам
или введите git help < выезд >