Вот что я сделал на своей предполагаемой стабильной ветке ...
% git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded alpha-0.3.0 to master.
% git status
# On branch alpha-0.3.0
# Your branch is ahead of 'origin/alpha-0.3.0' by 53 commits.
#
nothing to commit (working directory clean)
% git push
Fetching remote heads...
refs/
refs/heads/
refs/tags/
refs/remotes/
'refs/heads/master': up-to-date
updating 'refs/heads/alpha-0.3.0'
from cc4b63bebb6e6dd04407f8788938244b78c50285
to 83c9191dea88d146400853af5eb7555f252001b0
done
'refs/heads/unstable': up-to-date
Updating remote server info
Все это было ошибкой, как я позже понял. Я хотел бы отменить весь этот процесс и вернуть ветку alpha-0.3.0 обратно в прежнее состояние.
Что мне делать?
Ответы:
Вы должны убедиться, что другие пользователи этого хранилища не извлекают неправильные изменения или не пытаются построить поверх коммитов, которые вы хотите удалить, потому что вы собираетесь перематывать историю.
Затем вам нужно «принудительно» нажать старую ссылку.
или в вашем случае
Возможно, вы
receive.denyNonFastForwards
установили удаленный репозиторий. Если это так, то вы получите ошибку, которая включает фразу[remote rejected]
.В этом случае вам придется удалить и воссоздать ветку.
Если это не работает - возможно, потому что вы
receive.denyDeletes
установили, то вы должны иметь прямой доступ к хранилищу. В удаленном хранилище вы должны выполнить что-то вроде следующей сантехнической команды.источник
git push -f origin last_known_good_commit:branch_name
Я считаю, что вы также можете сделать это:
Это очень похоже на последний метод, за исключением того, что вам не нужно копаться в удаленном репо.
источник
--hard
") должен быть идентификатором любого коммита, в который вы хотите сбросить свою ветку.git reset --hard [commit_id]
чтобы мы не связывались с пространственно-временным континуумом.+
заставляет произойти толчок, аналогично-f
(но немного другому: stackoverflow.com/a/25937833/1757149 ). Без него, если вы пытаетесьgit push origin alpha-0.3.0
толкающий потерпит неудачу:Updates were rejected because the tip of your current branch is behind
.git revert
менее опасен, чем некоторые из предложенных здесь подходов:Замените 35f6af6f77f116ef922e3d75bc80a4a466f92650 своим собственным коммитом.
источник
Принятое решение (от @charles bailey) очень опасно, если вы работаете в общем репо.
Рекомендуется, чтобы все коммиты, переданные в удаленное репо с общим доступом, считались «неизменяемыми». Вместо этого используйте «git revert»: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#fixing-mistakes
https://git-scm.com/book/be/v2/Git-Basics-Undoing-Things
источник
Способ сделать это без потери изменений, которые вы хотели:
Затем вы можете выбрать файлы, которые вы хотели нажать
источник
Еще один способ сделать это:
git push origin --delete <branch_name>
)источник
Это вернет ваш репо к указанному номеру коммита
источник
Отмена множественных коммитов git reset --hard 0ad5a7a6 (просто предоставьте хеш SHA1 коммитов)
Отменить последний коммит
git reset --hard HEAD ~ 1 (изменения в последнем коммите будут удалены) git reset --soft HEAD ~ 1 (изменения в последнем коммите будут доступны в виде незафиксированных локальных изменений)
источник
Сценарий 1 : Если вы хотите отменить последний коммит, скажем, 8123b7e04b3, ниже приведена команда (это работает для меня):
Вывод выглядит так:
Дополнительная информация: Сценарий 2 : В некоторых ситуациях вы можете вернуть обратно то, что вы только что отменили (в основном, отменить отмену) с помощью предыдущей команды, а затем использовать следующую команду:
Вывод:
Более подробная информация здесь: https://github.com/blog/2019-how-to-undo-almost-anything-with-git
источник
Существующие ответы являются хорошими и правильными, однако что, если вам нужно отменить,
push
но:Используйте эту команду, чтобы вернуть изменения в ссылку:
источник
Если вы хотите игнорировать последний коммит, который вы только что выдвинули в удаленной ветке: это не удалит коммит, а просто проигнорирует его, переместив указатель git на коммит ранее, на который ссылается HEAD ^ или HEAD ^ 1
Но если вы уже выдвинули этот коммит, а другие потянули ветку. В этом случае переписывание истории вашей ветки нежелательно, и вы должны вместо этого отменить этот коммит:
источник