Oh shit, git!
https://t.me/nuancesprog
Перевод статьи Katie Sylor-Miller: Oh shit, 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