У меня есть проект в удаленном хранилище, синхронизированный с локальным хранилищем (разработка) и серверным (прод). Я вносил некоторые зафиксированные изменения, уже переданные удаленному и извлеченные с сервера. Теперь я хочу отменить эти изменения. Таким образом, я мог бы просто git checkout
выполнить коммит до изменений и зафиксировать новые, но я предполагаю, что будут проблемы с их повторным удалением. Любое предложение о том, как мне поступить?
610
Ответы:
Вы можете отменить отдельные коммиты с помощью:
Это создаст новый коммит, который отменит изменения указанного вами коммита. Обратите внимание, что он отменяет только этот конкретный коммит, а не коммит после этого. Если вы хотите вернуть диапазон коммитов, вы можете сделать это следующим образом:
Он отменяет фиксации между указанными коммитами и включая их.
Посмотрите man-страницу git-revert для получения дополнительной информации о
git revert
команде. Также посмотрите на этот ответ для получения дополнительной информации о возврате коммитов.источник
git log
<oldest_commit_hash>
был включен в списокРешение, которое не оставляет следов «отмены».
ПРИМЕЧАНИЕ: не делайте этого, если кто-то уже вытащил ваши изменения (я бы использовал это только в моем личном репо)
делать:
это будет повторно оформлять все обновления локально (поэтому в git status будут перечислены все обновленные файлы)
затем вы «делаете свою работу» и повторно фиксируете свои изменения (Примечание: этот шаг не является обязательным)
В данный момент ваше локальное дерево отличается от удаленного
подтолкнет и заставит удаленное устройство рассмотреть это нажатие и удалит предыдущее (указание remote-name и branch-name не обязательно, но рекомендуется избегать обновления всех ветвей с флагом обновления).
!! обратите внимание, что некоторые теги могут указывать на удаленный коммит !! как к удалению-а-удаленного тегу
источник
git push -f
для последнего правильного коммита и удаленной истории! Спасибо!Что я делаю в этих случаях:
На сервере переместите курсор назад к последнему известному удачному коммиту:
Локально, сделайте то же самое:
Смотрите полный пример ветки,
my_new_branch
которую я создал для этой цели:Это недавняя история после добавления некоторых вещей в
myfile.py
:Я хочу избавиться от последнего коммита, который уже был передан, поэтому я запускаю:
Ницца! Теперь я вижу, что файл, который был изменен в этом коммите (
myfile.py
), отображается как «не подготовленный для коммита»:Поскольку я не хочу этих изменений, я просто перемещаю курсор назад также локально:
Итак, теперь HEAD находится в предыдущем коммите, как локальном, так и удаленном:
источник
Вы можете ОБРАТИТЬ (или вы также можете назвать это УДАЛИТЬ ) Git Commit ОБА Локально и Удаленно, если вы выполните шаги, указанные ниже, через командную строку git.
Выполните следующую команду, чтобы увидеть идентификатор фиксации, который вы хотите вернуть
Вы получите как следующий скриншот
Если вы также проверите удаленный (через веб-интерфейс), вы увидите, что это будет так же, как показано ниже
Согласно скриншоту, вы находитесь на коммите e110322, однако вы хотите вернуться к 030bbf6 ОБА ЛОКАЛЬНО и УДАЛЕННО .
Выполните следующие шаги, чтобы УДАЛИТЬ / ОТМЕНИТЬ коммиты локально + удаленно
Первый локальный возврат к фиксации id 030bbf6
с последующим
Эти две команды очищают принудительный сброс до фиксации стадии 030bbf6, как показано ниже на снимке
Теперь, если вы запустите git status, вы увидите, что вы ДВА КОМИТЕТА BEHIND из удаленной ветви, как показано ниже
Запустите следующую, чтобы обновить ваши индексы (если есть какие-либо обновления). Рекомендуется попросить всех разработчиков не принимать какие-либо запросы на извлечение в основной удаленной ветви.
Как только вы закончите с этим, вы должны принудительно нажать этот коммит , используя символ + перед веткой, как показано ниже. Я использовал здесь в качестве основного филиала, вы можете заменить его на любой
Код
теперь, если вы видите веб-интерфейс remote, то коммит там также должен быть отменен.
источник
Это удалит ваши заданные коммиты
источник
В приведенной выше строке кода. «Последний аргумент представляет»
1 - возвращает один коммит.
2 - возвращает последние два коммита.
n - возвращает последние n коммитов.
Вам нужно нажать после этой команды, чтобы применить эффект на пульте. У вас есть другие варианты, такие как указание диапазона коммитов для возврата. Это один из вариантов.
Позже использовать
git commit -am "COMMIT_MESSAGE"
тоgit push
илиgit push -f
источник
git revert ref1..ref2
2020 простой способ:
(Хэш последнего коммита, который вы хотите сохранить).
Вы будете сохранять незафиксированные изменения локально.
Если вы хотите нажать еще раз, вы должны сделать:
источник
Вот мой путь:
Допустим, ветка называется
develop
.источник
Вы можете сделать что-то вроде
источник