Ответ 1
-
Список всех ветвей, содержащих фиксацию:
git branch --contains COMMITSHA
-
Удалите фиксацию из этих ветвей:
git checkout BRANCH git rebase -i COMMITSHA^ # delete line with commit and save
Если измененная ветвь отслеживается на любом удаленном устройстве, нажмите ее там с переопределением:
git push --force REMOTE BRANCH
например:
git push --force origin master
(Обратите внимание, что, в зависимости от вашего процесса разработки, фиксация может появляться и в необработанных удаленных ветких.)
-
Очистите фиксацию, чтобы она не могла быть восстановлена из вашего локального репо:
git reflog expire --all BRANCH1 BRANCH2 # list all branches you changed git prune --expire now
Обратите внимание, что вы также должны запустить эту команду во всех удаленных репозиториях, у которых была эта фиксация. Если у вас нет доступа к удаленному репо, вы должны пересечь свои пальцы - фиксация в конечном итоге истечет сама по себе и будет очищена
git gc
.Будьте предупреждены, что вышеприведенные команды удаляют все оборванные объекты из Git repo и всю историю изменений ветки - поэтому вы не сможете восстановить (не-судебно-медицинскими средствами) все, что было потеряно до его запуска.
-
Сообщите всем сотрудникам, чтобы получить измененные ветки и обновить любую работу, на которой они могли бы основываться на них. Они должны сделать следующее:
git fetch REMOTE
Для каждой ветки, основанной на ветке, которую вы изменили выше (включая ветвь, если она есть локально):
git checkout BRANCH git rebase REMOTE/BRANCH git reflog expire --all BRANCH
По завершении:
git prune --expire now