Как удалить коммит из репозитория в Atlassian Bitbucket
В этой статье я расскажу, как удалить коммит из репозитория в Bitbucket.
А зачем вообще удалять коммит?
Может так случиться, что Вы случайно запушите конфиденциальную информацию в репозиторий Bitbucket.
Например, Вы отделили Ваш код от паролей, создав файл настроек, но забыли включить этот файл в .gitignore, в результате после того, как Вы закоммитили изменения и запушили в Bitbucket, файл с паролями виден всем, у кого есть доступ к репозиторию. Или же Вы что-то тестили и написали пароль прямо в исходном файле, Вы, конечно, хотели потом его удалить, но забыли. Вы закоммитили, запушили и Ваш пароль опять виден всем.
Хорошо, он виден всем. Нужно как-то откатить эти изменения. Но как?
Вы можете удалить репозиторий и создать новый. Но в этом случае нужно будет настроить новый репозиторий, как старый, сказать коллегам, что Вы создали новый репозиторий. Это как-то слишком сложно.
Более простой способ это удалить коммит с паролем
В этой статье я покажу, как это сделать.
Создадим репозиторий в Bitbucket
Сначала создадим репозиторий в Bitbucket:

Создадим локальный репозиторий, внесем изменения и запушим в Bitbucket
Я создам новую папку для репозитория:
mkdir bitbucket-tutorial cd bitbucket-tutorial/
Теперь инициализирую репозиторий и добавлю ссылку на мой Bitbucket репозиторий:
git init git remote add origin https://alex1mmm@bitbucket.org/alex1mmm/bitbucket-repo-article.git
Создам новый файл и добавлю содержимое:
touch mynewfile.txt
Вот содержимое файла mynewfile.txt:
this line is initial commit
Я закоммичу изменения и запушу в Bitbucket:
git add * git commit -m "initial" git push origin master
Внесу измененияи в mynewfile.txt с паролем:
this line is initial commit I added my password info here
Опять закоммичу изменения и запушу в Bitbucket:
git add * git commit -m "sensitive info" git push origin master
Теперь у меня в Bitbucket два коммита:

И коммит с конфиденциальной информацией содержит мой пароль:

Даже если я сейчас быстро уберу из файла mynewfile.txt мой пароль, закоммичу изменения и запушу в Bitbucket, то я все-равно буду видеть мой коммит с конфиденциальной информацией, а значит и мой пароль. Поэтому нам нужно удалить коммит.
Удалим коммит с паролем
Давайте сначала найдем идентификатор нашего коммита:
git log --oneline --graph --decorate
Вот вывод этой команды:

Я пометил идентификатор коммита с паролем красный прямоугольником.
Этот коммит нам и нужно удалить. Но для того, чтобы его удалить, нам понадобится идентификатор предыдущего коммита. Вот он:

Теперь удаляем наш коммит вот такой коммандой. В команде мы указываем идентификатор предыдущего коммента:
git reset --hard 3e90065
Теперь файл mytextfile.txt выглядит вот так:
this line is initial commit
Правильно! Информации о пароле нет.
История коммитов выглядит вот так:

У нас нет коммита с паролем. Опять верно!
Но если мы посмотрим в Bitbucket, то коммит все еще будет там:

Правильно. Мы не запушили изменения. Давайте запушим:
git push --force origin master

И теперь если мы посмотрим в Bitbucket, то увидим только один коммит:

Отлично! Больше никто не видит наш пароль.
Удалить коммит bitbucket
Сделал дураций коммит, и удалил 2 языковых файла. И всюду уже затянул git pull. Можно как-то через сайт bitbucket.org удалить этот коммит из истории, чтобы репозиторий стал без этого коммита? И что дает «Stop watching» в коммите?
Отслеживать
Михаил Соснин
задан 26 окт 2016 в 9:28
Михаил Соснин Михаил Соснин
224 2 2 серебряных знака 13 13 бронзовых знаков
можно, но не нужно. В целом, есть такая чудная таблица i.stack.imgur.com/nxqyU.png где рассказано, что делать.
26 окт 2016 в 9:30
@KoVadim Почему не нужно? Я так понимаю через сам сайт bitbucket никак, надо через терминал get revert 2d83a76 (это номер id коммита — он не последний)
26 окт 2016 в 9:50
revert — это хороший вариант.
26 окт 2016 в 9:53
Просто удалить коммит в середине истории нельзя. Можно только сделать rebase.
26 окт 2016 в 10:06
Нужно не забыть форсированно запушить. git push —force
26 окт 2016 в 10:33
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- git
- bitbucket
- git-commit
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как отменить коммит через веб-интерфейс?
Увы, но никак.
Если неприязнь командной строки, можно воспользоваться графическими оболочками. Хоть от того же GitHub.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- GitHub
Как клонировать приватный проект с GitHub на свой VPS?
- 1 подписчик
- 28 дек. 2023
- 118 просмотров
Как в bitbucket отменить нескольких коммитов?
Всем доброго дня!
Немного страшновато, хотя в целом все понятно, хочу откатить все правки до определенного коммита.
Подскажите, пожалуйста, как это безопаснее всего сделать?
Я точно знаю хеш коммита, то есть это не неопреденные отмены, а четко понятные.
Заранее спасибо за ответы.
- Вопрос задан более двух лет назад
- 1233 просмотра
Комментировать
Решения вопроса 1
Saboteur @saboteur_kiev Куратор тега Git
software engineer
если изменения уже запушились в битбакет, то «откатить» их уже нельзя.
Можно просто откатиться на определенный коммит и закоммитить его еще раз, как новые правки.
Проделайте это в отдельно взятом бренче, если все будет выглядеть ок — вмержить в мастер или что у вас там основное.
Ответ написан более двух лет назад
Нравится 1 7 комментариев

а как же git push -f?
Saboteur @saboteur_kiev Куратор тега Git
а если ктото уже запуллил, как всех посинкать?
Денис Загаевский @zagayevskiy
Saboteur, когда будут в следующий раз пуллить, узнают об этом. Ну и задумаются о запрете форспуша

Saboteur, ну в принципе если ветка личная — почему бы и нет. Если мастер — тогда да

Алексей Типа @KayzerSoze Автор вопроса
Спасибо за ваши ответы.
В итоге, я создал новую ветку, откатил коммиты до нужного.
Осталось только «вмержить в мастер».
Только я раньше никогда не делал этого.
Работал с одной веткой только, чисто для себя.

Алексей Типа @KayzerSoze Автор вопроса
Знаете, что интересного произошло?
После мержа в мастер, я запулил файла на хостинг, и мне гит написал, мол все в порядке.
А по итогу, старые файлы остались на хосте.
Мне пришлось удалить полностью все на хосте, инитнуть гит, и только после пула все получилось.
Вопрос: почему после мержа и пула, файлы на хостинге не обновились? Вероятно, я что-то сделал не так..
Saboteur @saboteur_kiev Куратор тега Git
так а почему на хостинге они должны автоматом обновиться?
вообще, рекомендуется немного дочитать документацию по гиту, потому что могло быть что угодно. Догадываться тут нет смысла.