Comments 34
Хотелось бы увидеть заметку о том как дабавить новые камиты
польза заметки — не в том что она рассказывает что такое reset, а в том как в origin залить.
Если у вас не было такой проблемы, то я рад за вас.
товарищам которые из командной строки общаются с git, проблема кажется надуманной,
но есть и другие товарищи которые юзают git через GUI, в gui ( source tree) нет по отдельности push, SourceTree когда видит что у тебя локально камитов недостаёт, предлагает сделать pull и ни какой push --force не предлагается.
но снобам откуда знать о проблемах gui git-клиентов, у них взбурлило, они минуса шлют :)) мой прошлый рекорд всего 12 минусов, тут думаю хотя бы 20 отхвачу, аудитория Хабра не прощает инакомыслия :)
Мне всегда казалось что это можно исправить, но сколько раз я не начинал искать ответа на этот вопрос — как в git удалить камиты — столько раз мне это не удавалось.
А всё потому что мои поиски приводили меня к rebase, а надо было искать reset.
Вводим в google волшебную фразу «git remove commits from remote branch» вторая ссылка ведет на stackoverflow, и там как раз говорят про сочетание reset + push --force. Более того в статье по первой ссылке тоже это описано в разделе «About History Rewriting» — case 1…
Как то странно выходит, у вас была задача удалить коммиты из удаленной ветки, но вы два часа искали что-то, не вводя в поисковик «удалить коммиты из удаленной ветки», кстати, даже если ввести это на русском, то вторая ссылка приведет на хабр, на статью аналогичную вашей
когда знаешь ответ на вопрос найти его не сложно :) я бы в другой ситуации.
не дал мне Гугл вашу ссылку на Хабр, если бы дал я бы свой пост не делал.
по старой памяти я гуглил rebase
вы искали в Googl использование команды rebase, а не озвучивали поисковику вашу проблему.
сравните: "git удалить коммиты из удалённой ветки" и "git как с помощью rebase удалить кометы из удалённой ветки".
Проблема преждевременной оптимизации запроса
На Stackoverflow это называют "XY problem". Вместо решения задачи человек ищет решение задачи непременно каким-то инструментом, который ему известен. Оно же: "забиваю гвозди, как правильно держать микроскоп".
http://mywiki.wooledge.org/XyProblem
Ну, можно ещё написать вот так:
git reset --hard HEAD~5
Что эквивалентно откату назад на 5 камитов) Очень удобно так делать) Кстати, лучше не выполнять эту команду через sudo — иначе от суперюзера появятся файлы в проекте, что может в итоге привести к проблемам с правами доступа при работе приложения.
И вообще, статьи типа «тем, кто не осилил man» на хабре не очень любят
Выполните волшебную команду :)
sudo chown myusername ~ -R
Она присвоит текущего пользователя всем файлам в вашей домашней директории линукса) И дальше уже можно спокойно всё делать без sudo.
А всё потому что мои поиски приводили меня к rebase, а надо было искать reset.
А почему собственно не rebase,
делаешь git rebase -i HEAD~5
в появившемся редакторе удаляешь нужные
строчки, сохраняешь и выходишь из редактора. Намного же проще чем несколько команд?
Думаю лучше порекомендовать бесплатную книгу Pro Git, доступна на английском и на русском.
Мне кажется, что это способ отстрелить себе ноги, если удаленную ветку кто-то до этого себе скачал.
Это не уровень Хабра. Такие заметки лучше постить на Stack Overflow в формате «сам спросил, сам ответил».
На стеке вопрос бы закрыли как дубликат а ответ заминусовали точно так же, потому что он ошибочный и вообще деструктивный.
Имхо, лучше вообще не постить такие заметки, а вместо этого внимательно читать маны, Хабр и StackOverflow.
Попробую подвести итоги. В статье есть несколько существенных ошибок:
- Статья на самом деле решает задачу "как удалить коммиты из локальной ветки, а потом из ветки на удаленном репозитории", но из заголовка и текста этого не понять.
- Статья не обучает использованию команды
git reset
:
- Не рассказывает о других популярных вариантах использования:
reset
без параметров,reset --soft
. Да и проreset --hard
толком не рассказывает. - Поскольку
git reset --hard
переписывает историю, обязательно нужно было рассказать 0) как удалять коммиты, не теряя изменения 1) что переписывать историю можно только в своих фиче-ветках, 2) как восстанавливать коммиты с помощьюgit reflog
.
- Не рассказывает о других популярных вариантах использования:
- При любом упоминании
git push --force
нужно подробно рассказывать, куда нельзя и куда можно форс-пушить. Иначе кто-нибудь запушит вmaster
– далеко не везде используется и правильно настроена защита стабильных веток. - Выполнять операции с репозиторием под рутом нельзя, потому что после этого в нем появляются принадлежащие руту файлы (как починить).
Готовим git reset правильно