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

Отлично! Больше никто не видит наш пароль.

Leave a Reply

%d bloggers like this: