Скидки до 28% + 2-ая профессия бесплатно и подарки на 50 000₽

Главная | Все статьи | Код

Ой, блин, гит!

Время чтения статьи ~1 минута 7
Ой, блин, гит! главное изображение

Это перевод заметки "Oh shit, git!" от Katie Sylor-Miller.

Git — сложная штука. Испортить все очень легко, а исправить проблему иногда чертовски сложно. В официальной документации прослеживается проблема курицы и яйца: сложно понять как выйти из сложной ситуации если не знаешь название штуки, которая тебе требуется чтобы исправить проблему.

Вот список плохих ситуаций, в которые я попадала, и как я в итоге смогла выбраться. На простом языке!

Ой, блин, я сделал что-то не то. Тут же есть машина времени, правда?..

git reflog
# ты увидишь список всех действий во всех ветках
# у каждой есть индекс HEAD@{index}
# найди тот, после которого ты все поломал
git reset HEAD@{index}
# волшебная машина времени

Блин! Сделал коммит, но понял, что забыл одну мелочь

# сделай что хотел
git add . # или добавляй файлы по одному
git commit --amend
# теперь измени или оставь старое сообщение коммита
# теперь твой последний коммит включает то новое изменение!

Ой, блин, нужно изменить сообщение в последнем коммите

git commit --amend
# тут можно изменить сообщение

Бли-и-ин! Коммитнул в мастер, а надо было в новую ветку!

# создай новую ветку на основе мастера
git branch some-new-branch-name
# удали последний коммит из мастера
git reset HEAD~ --hard
git checkout some-new-branch-name
# теперь тот коммит в новой ветке! :)

Естественно, это не сработает если ты уже сделал пуш в origin. Ну, и если коммитов больше, чем один, то надо git reset HEAD@{число}.

Блин! Коммитнул не в ту ветку.

# отмени последний коммит, но оставь изменения
git reset HEAD~ --soft
git stash
# перейди в нужную ветку
git checkout name-of-the-correct-branch
git stash pop
git add . # или добавь файлы по одному
git commit -m "your message here"
# теперь изменения в нужной ветке

Другой вариант — использовать cherry-pick:

git checkout name-of-the-correct-branch
# возьми последний коммит мастера
git cherry-pick master
# удали его из мастера
git checkout master
git reset HEAD~ --hard

Блин, сделал diff, но ничего не происходит!

git diff --staged

Git показывает изменения в diff только для тех файлов, которые еще не добавлены в staging area (еще не сделан git add). С флагом --staged будет показывать diff для добавленных файлов.

Нахрен всё, я сдаюсь

cd ..
sudo rm -r fucking-git-repo-dir
git clone https://some.github.url/fucking-git-repo-dir.git
cd fucking-git-repo-dir
Аватар пользователя R. D.
R. D. 19 декабря 2017
7
Похожие статьи
Рекомендуемые программы
профессия
Верстка на HTML5 и CSS3, Программирование на JavaScript в браузере, разработка клиентских приложений используя React
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Тестирование веб-приложений, чек-листы и тест-кейсы, этапы тестирования, DevTools, Postman, SQL, Git, HTTP/HTTPS, API
4 месяца
с нуля
Старт 26 декабря
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Google таблицы, SQL, Python, Superset, Tableau, Pandas, визуализация данных, Anaconda, Jupyter Notebook, A/B-тесты, ROI
9 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на PHP, Разработка веб-приложений и сервисов используя Laravel, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на Ruby, Разработка веб-приложений и сервисов используя Rails, проектирование и реализация REST API
5 месяцев
c опытом
Старт 26 декабря
профессия
Программирование на JavaScript в браузере и на сервере (Node.js), разработка бекендов на Fastify и фронтенда на React
16 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на JavaScript, разработка веб-приложений, bff и сервисов используя Fastify, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Git, JavaScript, Playwright, бэкенд-тесты, юнит-тесты, API-тесты, UI-тесты, Github Actions, HTTP/HTTPS, API, Docker, SQL
8 месяцев
c опытом
Старт 26 декабря