Как отменить пуш в гит
Envek / rescue-from-git-push-force.md
Как результат, последние коммиты коллег безвозвратно потеряны, и вы чувствуете неотвратимость их ярости…
Но это git, а значит всё можно починить!
Вариант самый простой и для ленивых
Простой вариант: я последний пушил в ветку
Этот вариант прост тем, что у вас есть всё, что нужно для восстановления за 1 минуту, не выходя из консоли.
Перво-наперво: без паники. Не закрывайте терминал!
Сожалея о содеянном зайдите в чат и покайтесь, в том, что вы наделали.
Первая группа символов, подозрительно похожих на SHA коммита и есть наш ключ к спасению: deadbeef — это действительно коммит, который был в ветке master до того, как мы всё сломали. Теперь просто пушните этот коммит в ветку, которую вы поломали:
Всё, вы всех спасли. Но больше так не делайте.
Сложный вариант: починить за кем-то
Стоп! Без паники! Зайдите в чат, покайтесь, скажите, чтобы никто ничего не делал — вам понадобится время, чтобы всё вернуть.
Здесь нам поможет тот факт, что GitHub не удаляет коммиты, которые больше не принадлежат ни к какой ветке. Но, что усложняет задачу, не даёт их и стянуть с командной строки.
Если force-пуш сделали вы, то просто возьмите хэш коммита, который был в ветке до вас (как и в прошлом пункте). Если не вы, то можно зайти в ленту событий GitHub’а (на главной странице, в случае, если вы подписаны на репозиторий) и посмотреть, кто последний коммитил в эту ветку:
Теперь перейдите по ссылке https://github.com/org/repo/tree/deadbeef (где deadbeef — хэш последнего коммита в ветке, которую вы перетёрли), откройте переключатель веток и тэгов, введите имя для новой ветки (например master-before-force-push ) и выберите пункт «Create branch».
Теперь через консоль можно получить недостающие коммиты:
и теперь задача сводится к предыдущей:
Если наработки в вашем master е ещё нужны, то лучше отребейзить свои коммиты поверх него:
Как избежать такого в дальнейшем?
Отмена ‘git push’
Вот что я сделал на моей предположительно устойчивой ветке.
Это была ошибка, как я понял позже. Я хотел бы отменить весь этот процесс и вернуть ветку alpha-0.3.0 обратно в то, что было.
ОТВЕТЫ
Ответ 1
Вам нужно убедиться, что другие пользователи этого репозитория не получат неправильные изменения или не пытаются построить поверх коммитов, которые вы хотите удалить, потому что вы собираетесь перемотать историю.
Затем вам нужно «принудительно» нажать старую ссылку.
или в вашем случае
В этом случае вам нужно будет удалить и воссоздать ветвь.
Ответ 2
Я считаю, что вы также можете это сделать:
Это очень похоже на последний метод, за исключением того, что вам не нужно гасить в удаленном репо.
Ответ 3
git revert менее опасен, чем некоторые из предложенных здесь подходов:
Замените 35f6af6f77f116ef922e3d75bc80a4a466f92650 своей собственной фиксацией.
Ответ 4
Принятое решение (от @charles bailey) очень опасно, если вы работаете в общем репо.
Как наилучшая практика, все коммиты, отодвинутые к удаленному репо, который является общим, должны считаться «неизменяемыми». Вместо этого используйте git revert ‘: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#fixing-mistakes
Ответ 5
Способ сделать это, не теряя желаемых изменений:
Затем вы можете выбрать файлы, которые вы хотели нажать
Ответ 6
Другой способ сделать это:
Ответ 7
Это приведет к возврату вашего репо к указанному номеру фиксации
Ответ 8
Отменить последнюю фиксацию
1 (изменения в последнем фиксации будут доступны как локальные локальные изменения)
Ответ 9
Сценарий 1. Если вы хотите отменить последний коммит, скажем, 8123b7e04b3, ниже приведена команда (это работает для меня):
Вывод выглядит так:
Дополнительная информация: Сценарий 2: В некоторых ситуациях вы можете вернуть обратно то, что вы только что отменили (в основном, отменить отмену) с помощью предыдущей команды, а затем использовать следующую команду:
Ответ 10
Используйте эту команду, чтобы вернуть изменения в ссылку:
Ответ 11
Если вы хотите игнорировать последний коммит, который вы только что выдвинули в удаленной ветке: это не удалит коммит, а просто проигнорирует его, переместив указатель git на коммит ранее, на который ссылается HEAD ^ или HEAD ^ 1
Но если вы уже выдвинули этот коммит, а другие потянули ветку. В этом случае переписывание истории веток нежелательно, и вам следует вместо этого отменить этот коммит:
Отмена действий в Git
Apr 24, 2020 · 3 min read
Мы всегда готовы подчеркивать бесчисленные возможности, которые предлагает Git, и эта статья не станет исключением. Git известен своей потрясающей способностью отменять практически любые действия! Наверняка на память вам уже приходят тысячи печальных случаев, когда вы делали объединение, а потом понимали, что в ваши планы оно не входило. Даже если вам кажется, что ошибочное объединение— это величайшая неудача всей вашей жизни, сделайте глубокий вдох и дочитайте статью до конца.
Не существует какого-то одного традиционного способа отмены действий в Git. Отмена производится с помощью некоторых других команд. Мы рассмотрим “первую пятерку” сценариев, которые помогут вам исправить ошибку и двинуться дальше.
Отмена Git Add
Од и н из самых распространенных вопросов в сообществе Git звучит так: “Как откатить git add перед коммитом?” Вы можете отменить действия над конкретным файлом или все внесенные изменения.
Решение, которое потребуется для этого, весьма простое. Чтобы откатить один файл, просто вызовите команду git reset :
Для отмены всех изменений запустите следующее:
Как откатить Git Merge
Объединение может привести к нежелаемым результатам. Но, как уже было сказано, вы можете с легкостью исправить свою ошибку! Давайте представим сценарий, в котором вы уже отправили изменения и осознали, что вам нужно отменить сделанное объединение.
Затем вернитесь к упомянутому коммиту, выполнив следующее:
Git также предлагает возможность предварительного просмотра, если вы хотите увидеть, что произойдет при объединении веток.
Как откатить Git Reset
Предлагаем суперкороткий способ отменить команду git reset:
Отмена последних коммитов в Git
Команду git reset можно использовать для отмены внесенных изменений:
x введите число. Например, если вы укажете
Другой метод — это команда git revert HEAD
Этот метод лучше всего работает в случае с общими публичными репозиториями.
Отмена Git Rebase
Допустим, вы выполнили команду git rebase в локальной ветке git и отправили ее в удаленную ветку. Следом вы поняли, что это не отвечает вашим ожиданиям, и захотели отменить сделанное.
Самый простой способ — найти главный коммит вашей ветки, запустив команду:
Заключение
Вот и все о том, как вы можете отменить наиболее часто используемые команды в Git. Хоть никакой традиционной команды отмены и нет, другие команды git могут помочь вам откатить то, что вы могли сделать по ошибке.
У меня есть проект в удаленном репозитории, синхронизированный с локальным репозиторием (разработка) и серверным (prod). Я делал некоторые фиксированные изменения, которые уже были отправлены на удаленный компьютер и сняты с сервера. Теперь я хочу отменить эти изменения. Так что я мог бы просто git checkout выполнить фиксацию перед изменениями и зафиксировать новые изменения, но я предполагаю, что возникнут проблемы с их повторной отправкой на удаленный компьютер. Любые предложения о том, как мне действовать?
13 ответов
Вы можете отменить отдельные коммиты с помощью:
Это создаст новую фиксацию, которая отменяет изменения указанной вами фиксации. Обратите внимание, что он отменяет только эту конкретную фиксацию, но не фиксируется после этого. Если вы хотите отменить ряд коммитов, вы можете сделать это следующим образом:
Он отменяет коммиты между указанными коммитами включительно.
Чтобы узнать хэш фиксации (й), вы можете использовать git log
Другой способ сделать это без возврата (следы отмены):
Не делайте этого, если кто-то еще нажал другие коммиты
Вернитесь в свою ветку.
Сброс, чтобы отменить последнюю фиксацию (чтобы отменить его):
Удалите ветку на удаленном (например, origin удаленном).
Повторно отправьте ветку (без нежелательной фиксации) на удаленный компьютер.
Надеюсь, это поможет! 😉
Чтобы сделать это чисто:
Теперь вы получите список коммитов от последнего удачного коммита до HEAD с вариантами, что делать с каждым коммитом. DROP отбросит эту фиксацию. Сохраните файл.
Теперь, чтобы исправить апстрим, сделайте:
Это сохраняет журнал чистым, удаляя неправильную фиксацию вместо того, чтобы вводить новые фиксации, исправляющие ранее ошибочные фиксации.
Вы можете сделать что-то вроде
Сброс у меня сработал: Спасибо @ Mo D Genensis и @ vibs2006
Полностью удалит все неправильные коммиты без каких-либо следов.
Примечание: пример предполагает основную ветвь на удаленном «origin».
В строке кода выше. «Последний аргумент представляет»
Вам нужно нажать после этой команды, чтобы применить эффект на пульте дистанционного управления. У вас есть и другие варианты, например, указание диапазона откатываемых коммитов. Это один из вариантов.
2020 Простой способ:
(Хеш последнего коммита, который вы хотите сохранить).
Вы сохраните незафиксированные изменения локально.
Если вы хотите снова нажать, вам нужно сделать:
Выполните следующую команду, чтобы увидеть идентификатор фиксации, который вы хотите вернуть.
Вы получите следующий снимок экрана
Выполните следующие действия, чтобы УДАЛИТЬ / ОБРАТИТЬ КОМИТЕТЫ локально и удаленно
Первый локальный возврат к фиксации с идентификатором 030bbf6
Теперь, если ты бежишь git status, то вы увидите, что вы ДВА КОММЕТАЦИИ СЗАДИ из удаленной ветки, как показано ниже.
Выполните следующее, чтобы обновить свои индексы (если есть обновления). Рекомендуется попросить всех разработчиков не принимать запросы на вытягивание в основной удаленной ветке.
Теперь, если вы видите веб-интерфейс удаленного доступа, то фиксация также должна быть отменена.
Как это отменить?! Git-команды для исправления своих ошибок
Если вы ошиблись в Git’е, разобраться, что происходит и как это исправить, — непростая задача. Документация Git — это кроличья нора, из которой вы вылезете только зная конкретное название команды, которая решит вашу проблему.
Рассказываем о командах, которые помогут вам выбраться из проблемных ситуаций.
Вот блин, я сделал что-то не то… У Git ведь есть машина времени?!
Так вы можете восстановить то, что случайно удалили, и откатить слияние, после которого всё сломалось. reflog используется очень часто — давайте поблагодарим того, кто предложил добавить его в Git.
Я только что сделал коммит и заметил, что нужно кое-что поправить!
Внимание Никогда не изменяйте коммиты в публичной ветке. Используйте эту команду только для коммитов в локальной ветке, иначе вам конец.
Мне нужно изменить сообщение последнего коммита!
Тупые требования к оформлению сообщений…
Я случайно закоммитил что-то в мастер, хотя должен был в новую ветку!
Команды не сработают, если вы уже закоммитили в публичную ветку. В таком случае может помочь git reset HEAD@ <какое-то-количество-коммитов-назад>вместо HEAD
Ну отлично. Я закоммитил не в ту ветку!
Я пытаюсь запустить diff, но ничего не происходит
Если вы знаете, что изменения были внесены, но diff пуст, то возможно вы индексировали изменения (через add ). Поэтому вам нужно использовать специальный флаг.
Конечно, «это не баг, а фича», но с первого взгляда это чертовски неоднозначно.
Мне нужно каким-то образом отменить коммит, который был сделан 5 коммитов назад
Помимо этого, откатить можно не целый коммит, а отдельный файл. Но следуя канону Git’а, это будут уже совсем другие команды…
Мне нужно отменить изменения в файле
Именно поэтому checkout — лучший инструмент для отката изменений в файлах.
Давай по новой, Миша, всё х**ня
Если вам нужно полностью откатиться до исходной версии (т. е. отменить все изменения), то можете попробовать сделать так.
27–29 декабря, Онлайн, Беcплатно
Будьте осторожны, эти команды разрушительны и необратимы.
Эти команды Git нужны для экстренных ситуаций, но пригодиться могут не только они. Про другие команды с пояснениями писали тут:



