Как я могу вернуться к конкретному коммиту в git ?
Лучший ответ, который кто-то мог мне дать, это использовать git revert
X раз, пока я не достигну желаемого коммита.
Допустим, я хочу вернуться к коммиту, которому уже 20 коммитов, мне придется запустить его 20 раз.
Есть ли более простой способ сделать это?
Я не могу использовать сброс, потому что этот репозиторий является публичным.
git
git-checkout
git-revert
Дэвид
источник
источник
Ответы:
Попробуй это:
где
[revision]
хеш коммита (например:)12345678901234567890123456789012345678ab
.Не забудьте
.
в конце, очень важно. Это применит изменения ко всему дереву. Вы должны выполнить эту команду в корне проекта git. Если вы находитесь в каком-либо подкаталоге, то эта команда изменяет только файлы в текущем каталоге. Тогда совершайте, и вы должны быть хорошими.Вы можете отменить это,
это удалит все модификации из рабочего каталога и промежуточной области.
источник
Чтобы откатиться до определенного коммита:
Для отката 10 фиксирует назад:
Вы можете использовать «git revert», как в следующем посте, если вы не хотите переписывать историю
Как вернуть Git-репозиторий к предыдущему коммиту?
источник
Ну, наверное, вопрос в том, что вы подразумеваете под «откатом»? Если вы не можете этого сделать,
reset
потому что она общедоступна, и вы хотите сохранить историю изменений без изменений, значит, вы хотите, чтобы ваша рабочая копия отражала определенный коммит? Используйтеgit checkout
и передайте хэш.Редактировать: Как было отмечено в комментариях, использование
git checkout
без указания ветки оставит вас в состоянии "нет ветки". Используйте,git checkout <commit> -b <branchname>
чтобы оформить заказ в филиале илиgit checkout <commit> .
оформить заказ в текущем филиале.источник
git checkout
- он может проверить любую ветку (текущую или новую), какую пожелает. Я обновлю свой ответ, чтобы он не был неоднозначным.git reset
удалить те файлы, которые, как вы говорите, не хотите делать. Попробуйте сделать это в отдельной ветке: уgit checkout <commit> -b <branchname>
вас не будет застойных файлов в этой ветке .checkout
заключается в том, что он не будет удалять файлы, которые были добавлены в предыдущем коммите.Оригинальный плакат гласит:
Нет необходимости использовать
git revert
X раз.git revert
может принять диапазон фиксации в качестве аргумента, поэтому вам нужно использовать его только один раз, чтобы отменить диапазон фиксаций.Например, если вы хотите отменить последние 20 коммитов:Диапазон фиксации
HEAD~20..
короток дляHEAD~20..HEAD
и означает «начать с 20- го родителя фиксации HEAD и вернуть все коммиты после него до HEAD».Это вернет последние 20 коммитов, при условии, что ни один из них не является коммитом слияния. Если есть коммиты слияния, вы не можете отменить их все одной командой, вам нужно будет отменить их индивидуально с помощью
Обратите внимание, что я тестировал, используя диапазон с
git revert
использованием git версии 1.9.0. Если вы используете более старую версию git, использование диапазона сgit revert
может работать, а может и не работать.В этом случае,
git revert
предпочтительнее, чемgit checkout
.Обратите внимание, что в отличие от этого ответа, который говорит использовать
git checkout
,git revert
фактически удаляются все файлы, которые были добавлены в любой из коммитов, которые вы возвращаете , что делает это правильным способом отменить диапазон ревизий.Документация
источник
Шаг 1: получить список коммитов:
Вы получите список, как в этом примере:
Шаг 2: скопируйте необходимый хеш коммита и вставьте его для проверки:
Это все.
источник
сделаю это. Это "git checkout", но без обновления HEAD.
Вы можете достичь того же эффекта с
если вы предпочитаете объединять удобные команды вместе.
Это оставит вас с вашим рабочим деревом и индексом в желаемом состоянии, вы можете просто
git commit
закончить.источник
Хотите HEAD отдельный режим?
Если вы хотите откатить время X до определенного коммита с DETACHED HEAD (то есть вы ничего не можете испортить), тогда непременно используйте следующее:
(замените X на количество коммитов, которые вы хотите вернуться)
IE, чтобы вернуться на один коммит:
источник
Допустим, вы работаете над проектом и через день или около того. Вы заметили, что одна функция все еще дает вам ошибки. Но вы не знаете, какое изменение вы сделали, что привело к ошибке. Таким образом, вы должны ловить рыбу предыдущих рабочих коммитов. Чтобы вернуться к определенной фиксации:
Итак, этот коммит работает на вас. Нет больше ошибок. Вы определили проблему. Теперь вы можете вернуться к последнему коммиту:
И извлеките конкретный файл, прежде чем он вызвал ошибку (в моем случае я использую пример Gemfile.lock):
И это один из способов обработки ошибок, созданных вами в коммитах, без осознания ошибок на потом.
источник
Вы можете найти идентификатор коммита, связанный с каждым коммитом, в разделе коммитов GitHub / BitBucket / Gitlab. Это очень просто, предположим, ваш идентификатор коммита 5889575, а затем, если вы хотите вернуться к этой части в вашем коде, вам просто нужно набрать
Это приведет вас к этому моменту в вашем коде.
источник
Я не уверен, что изменилось, но я не могу оформить конкретный коммит без опции
--detach
. Полная команда, которая работала для меня, была:git checkout --detach [commit hash]
Чтобы вернуться из отключенного состояния, я должен был оформить заказ в местном отделении:
git checkout master
источник
master
решает проблему оставаться отстраненным, пока он работаетgit reset --hard
илиgit checkout -- .
работал, но остался отстраненнымВот пример, чтобы сделать это
источник