Я совершил ошибку и не знаю, как удалить последнюю пушку в репозитории. Я загружаю последние обновления приложения, но у них есть конфликты, и я отправляю их в репозиторий.
Как удалить мой последний коммит? Или как исправить?
источник
Я совершил ошибку и не знаю, как удалить последнюю пушку в репозитории. Я загружаю последние обновления приложения, но у них есть конфликты, и я отправляю их в репозиторий.
Как удалить мой последний коммит? Или как исправить?
Во-первых, если вы работаете с другими людьми в одном и том же репозитории кода, вам не следует удалять фиксацию, поскольку, когда вы принудительно обновляете репозиторий, он оставит локальные репозитории ваших коллег в незаконном состоянии (например, если они сделал коммиты после того, который вы удалили, эти коммиты будут недействительными, поскольку они были основаны на несуществующем коммите).
Сказал, что вы можете отменить фиксацию. Эта процедура выполняется по-разному (разные команды) в зависимости от используемой вами CVS:
В git :
git revert <commit>
О ртутном :
hg backout <REV>
РЕДАКТИРОВАТЬ: операция возврата создает новую фиксацию, которая делает противоположность отмененной фиксации (например, если исходная фиксация добавила строку, возвратная фиксация удаляет эту строку), эффективно удаляя изменения нежелательной фиксации без перезаписи истории репозитория.
git backout <REV>
? Илиhg backout <REV>
:?Если вы не работаете с другими (или счастливы причинить им серьезное раздражение) , то можно удалить коммиты из веток bitbucket.
Если вы пытаетесь изменить не главную ветку:
если вы пытаетесь изменить главную ветку
Обычно в git ветка master не является особенной - это просто соглашение. Однако bitbucket, github и подобные сайты обычно требуют наличия основной ветки (предположительно потому, что это проще, чем писать дополнительный код для обработки события, что в репозитории нет веток - не уверен). Итак, вам нужно создать новую ветку и сделать ее основной:
На Bitbucket перейдите в настройки репозитория и измените «Основную ветку» на
master_temp
(на Github измените «Ветвь по умолчанию»).Теперь перейдите в Bitbucket, и вы должны увидеть нужную историю. Теперь вы можете перейти на страницу настроек и снова изменить главную ветку на
master
.Этот процесс также будет работать с любыми другими изменениями истории (например,
git filter-branch
). Вам просто нужно убедиться, что вы сбросили соответствующие коммиты, прежде чем новая история отделится от старой.редактировать : очевидно, вам не нужно возиться со всеми этими хлопотами на github, так как вы можете принудительно нажать ветку сброса .
Работа с раздраженными сотрудниками
В следующий раз, когда кто-нибудь попытается извлечь из вашего репозитория (если они уже извлекли плохую фиксацию), извлечение завершится ошибкой. Им придется вручную выполнить сброс до фиксации перед измененной историей, а затем снова выполнить операцию.
Если они сделали плохую фиксацию, и зафиксировали поверх нее , то им придется сбросить, а затем
git cherry-pick
хорошие коммиты, которые они хотят создать, эффективно воссоздавая всю ветку без плохой фиксации.Если они никогда не извлекали плохую фиксацию, то весь этот процесс на них не повлияет, и они могут вытащить как обычно.
источник
вы можете выполнить сброс, а
HEAD^
затем принудительно нажать его.Он удалит вашу последнюю фиксацию и отразится на битбакете как удаленная фиксация, но все равно останется на их сервере.
источник
Вот простой подход, состоящий из 4 шагов:
0 - Сообщите команде, что собираетесь исправить репозиторий
Свяжитесь с командой и сообщите им о грядущих изменениях.
1 - Удалить последнюю фиксацию
Предполагая, что ваша целевая ветка
master
:На этом все готово, если вы работаете в одиночку.
2 - Исправьте локальные репозитории вашего товарища по команде
От вашего товарища по команде:
Если у вашего товарища по команде не было новых коммитов, на этом вы закончили и должны синхронизироваться.
3 - Восстановление потерянных коммитов
Допустим, у товарища по команде был новый и неопубликованный коммит, который был утерян в этом процессе.
Сделайте это для необходимого количества коммитов.
Я много раз успешно использовал этот подход. Требуются командные усилия, чтобы убедиться, что все синхронизировано.
источник
У меня были проблемы с git revert в прошлом (в основном потому, что я не совсем уверен, как это работает). У меня были проблемы с возвратом из-за проблем слияния ..
Мое простое решение таково.
Шаг 1.
ваш проект в другой папке, затем:
Шаг 2.
затем Шаг 3.
в вашем последнем (и основном) каталоге проекта (тот, который имеет проблемную последнюю фиксацию) вставьте файлы шага 2
Шаг 4.
Шаг 5.
наслаждаться
источник
git revert
прост: он создает новую фиксацию, которая выполняет обратные изменения в предыдущей фиксации (или нескольких фиксациях). Он не удаляет коммиты, поэтому не имеет отношения к этому вопросу. Кроме того, шаг клонирования здесь не нужен.Как говорили другие, обычно вы хотите использовать
hg backout
илиgit revert
. Однако иногда очень хочется избавиться от фиксации.Во-первых, вам нужно перейти в настройки вашего репозитория. Щелкните
Strip commits
ссылку.Введите идентификатор набора изменений, который нужно уничтожить, и щелкните
Preview strip
. Это позволит вам увидеть, какой ущерб вы собираетесь нанести, прежде чем вы его нанесете. Затем просто нажмите,Confirm
и ваша фиксация больше не будет историей. Убедитесь, что вы рассказали всем своим соавторам о том, что вы сделали, чтобы они случайно не вернули ошибочную фиксацию.источник
После того, как изменения будут зафиксированы, их нельзя будет удалить. потому что основная природа фиксации - не удалять.
То, что вы можете сделать (простой и безопасный метод),
Интерактивная база:
1)
git rebase -i HEAD~2
# покажет ваши последние 2 коммита2) Ваша фиксация будет отображаться как «Недавние», которые появятся внизу страницы LILO (последний в Last Out)
Полностью удалить последнюю строку фиксации
3) сохраните его
ctrl+X
илиESC:wq
теперь ваша ветка будет обновлена без вашей последней фиксации ..
источник
Вы можете написать команду также для Bitbucket, как упоминал Дастин :
Чтобы удалить последнюю фиксацию локально в git, используйте:
источник
К настоящему времени облачный битбакет (я не уверен, какая версия) позволяет откатить фиксацию из файловой системы следующим образом (я не вижу, как вернуться из интерфейса Bitbucket в браузере Chrome).
- сделайте резервную копию всего каталога, чтобы обезопасить внесенные вами непреднамеренно изменения
-выбрать извлеченный каталог
-правая кнопка мыши: меню git черепахи
-repo-browser (опция меню 'вернуться' отменяет только незавершенные изменения)
-нажать кнопку HEAD
-выбираем самую верхнюю строку (последняя фиксация)
-правая кнопка мыши: отменить изменение этой фиксации
-после отмены изменений в файловой системе нажмите кнопку фиксации
-это обновляет GIT сообщением "Вернуть предыдущее сообщение". Это отменяет фиксацию того-то и такого-то '
-выберите «зафиксировать и нажать».
источник