Как удалить коммит из репозитория в 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, то увидим только один коммит:

Отлично! Больше никто не видит наш пароль.
Как отменить коммит в Git
Чтобы отменить последний коммит в локальном Git репозитории, используется команда:
git reset HEAD~
Данная команда отменяет последний коммит. Файлы из данного последнего коммита переходят в статус unstaged, то есть в то состояние, в котором они были до коммита. Если запустить команду git status , то эти файлы будут находиться в списке «Changes not staged for commit». Содержимое файлов не изменяется.
Полное удаление последнего коммита
Если вы хотите полностью удалить последний коммит, включая все изменения файлов данного коммита, то используется команда:
git reset --hard HEAD~1
Например: у вас есть следующие коммиты A←B←C←HEAD . Коммит C самый последний и на него указывает HEAD (указатель на текущее состояние). После выполнения команды git reset —hard HEAD~1 вы получите состояние A←B←HEAD (коммит C будет удален). HEAD теперь указывает на коммит B .
Смотрите также:
- Как изменить файлы в старом коммите (не последнем)
- Как добавить все файлы в коммит, кроме одного
- Как создать ветку из предыдущего коммита
- Команда Git stash. Как прятать изменения в Git
- Как показать файлы, которые будут добавлены в текущий коммит
- Как восстановить файл
- Как изменить комментарий к коммиту
- Как отменить git add
- Как клонировать репозиторий
- Как посмотреть ветки
- Опубликовано: 13.09.2018
- yuriy
Удалить коммит 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.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
vorozhba / Как удалить commit в Github.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| 1. Получаем хэш-код коммита, к которому хотим вернуться. |
| 2. Заходим в папку репозитория и пишем в консоль: |
| $ git reset —hard a3775a5485af0af20375cedf46112db5f813322a |
| $ git push —force |
levosay commented Jul 7, 2021
alex-sansei commented Jul 15, 2021
JerryCash-x commented Jul 20, 2021
zose43 commented Aug 13, 2021
somefellahere commented Aug 21, 2021 •
be careful with: git reset —hard a3775a5485af0af20375cedf46112db5f813322a
it delete all your current changes, use that command without —hard , then git push —force
Fariarx commented Sep 20, 2021
ZodiacGP commented Sep 24, 2021
Sirena-byte commented Sep 29, 2021
огромное спасибо! помогло)
ghost commented Oct 1, 2021
Che-p-bot commented Nov 26, 2021
Спасибо, это очень помогло!
yurasts commented Nov 27, 2021
SlimDaddy228 commented Dec 12, 2021
Tim-Kids commented Dec 29, 2021
спасибо! все-таки русскоязычные запросы в Google тоже хорошо порой помагают.
KarimullinArthur commented Jan 17, 2022 •
Fobiya commented Mar 5, 2022
instasanjik commented Mar 24, 2022
Спасибо вам большое! Вы нас очень выручили!
Moon1706 commented Apr 17, 2022
@vorozhba
Хелло! А можно ли как-то удалить не последние коммиты путем перемещения HEAD назад, а точечно одни коммит из последовательности? Пример, [1,2,3,4] -> [1,3,4]
olek07 commented Apr 18, 2022
@vorozhba Хелло! А можно ли как-то удалить не последние коммиты путем перемещения HEAD назад, а точечно одни коммит из последовательности? Пример, [1,2,3,4] -> [1,3,4]
mpodaniev commented Apr 18, 2022
@vorozhba
Хелло! А можно ли как-то удалить не последние коммиты путем перемещения HEAD назад, а точечно одни коммит из последовательности? Пример, [1,2,3,4] -> [1,3,4]
Через Вебшторм можно, просто удаляешь нужные коммит и пушишь через force. А как с помощью консольных команд не знаю, но точно можно.
olek07 commented Apr 19, 2022
@vorozhba
Хелло! А можно ли как-то удалить не последние коммиты путем перемещения HEAD назад, а точечно одни коммит из последовательности? Пример, [1,2,3,4] -> [1,3,4]
Через Вебшторм можно, просто удаляешь нужные коммит и пушишь через force. А как с помощью консольных команд не знаю, но точно можно.
Разве так можно? Там же что-то вроде блокчейна. Следующий зависит от предыдущего. Разве нет?
mpodaniev commented Apr 19, 2022
@vorozhba
Хелло! А можно ли как-то удалить не последние коммиты путем перемещения HEAD назад, а точечно одни коммит из последовательности? Пример, [1,2,3,4] -> [1,3,4]
Через Вебшторм можно, просто удаляешь нужные коммит и пушишь через force. А как с помощью консольных команд не знаю, но точно можно.
Разве так можно? Там же что-то вроде блокчейна. Следующий зависит от предыдущего. Разве нет?
Не знаю на счет блокчейна, и думаю что такого нет в гите.
Но постоянно так делаю, когда в фичебранче что-то разрабатываю, а потом оказывается что в каком-то коммите что-то не нужное добавил, а это могло быть десять коммитов назад к примеру. Просто удалил его локально и через форс пуш обновил данные в удаленном репозитории.
Все, в удаленном репозитории больше нет этого коммита
SlimDaddy228 commented Apr 27, 2022
давно нашел, не раз выручало, красавчик
maxim-saharov commented May 28, 2022
@vorozhba
Хелло! А можно ли как-то удалить не последние коммиты путем перемещения HEAD назад, а точечно одни коммит из последовательности? Пример, [1,2,3,4] -> [1,3,4]
Через Вебшторм можно, просто удаляешь нужные коммит и пушишь через force. А как с помощью консольных команд не знаю, но точно можно.
Разве так можно? Там же что-то вроде блокчейна. Следующий зависит от предыдущего. Разве нет?
Не знаю на счет блокчейна, и думаю что такого нет в гите.
Но постоянно так делаю, когда в фичебранче что-то разрабатываю, а потом оказывается что в каком-то коммите что-то не нужное добавил, а это могло быть десять коммитов назад к примеру. Просто удалил его локально и через форс пуш обновил данные в удаленном репозитории.
Все, в удаленном репозитории больше нет этого коммита
при удалении и при переименовании названия комита — вебшторм там много что шаманит и делает rebase всякий — о чем потом показывает в своей консоле — но если будут конфликты то предложит сравнивать и можно наломать там что то — лучше всегда перед этим делайте бек ап и потом играйтесь)