Ох, твою мать, git!
Git сложный: налажать проще простого, выяснить как исправить свою ошибку практически, бл*ть, невозможно! В документации четко видна проблема курицы и яйца. Вы не можете найти решения для своей проблемы если не знаете заранее названия этой самой проблемы, которую собираетесь исправить.
Поэтому ниже я собрала несколько факапов, в которых оказывалась сама и описала простым языком, как самостоятельно из них выбраться.
Твою налево, я закоммитила и тут же поняла, что нужно внести небольшие изменения!
# внесите изменения
git add .
git commit --amend
# следуйте подсказкам, чтобы изменить или оставить прежний комментарий
# теперь последний коммит содержит наше изменение!
Это обычно происходит со мной, если я сливаю в master, а потом запускаю тесты/линтер… и, черт меня побери, я не вставила пробел после знака равенства. Вы, конечно, можете внести изменения, создав новый коммит и затем запустив команду rebase -i чтобы объединить старый и новый коммиты, но мой вариант примерно в миллион раз быстрее.
Жеваный крот, мне нужно изменить комментарий к последнему коммиту!
git commit --amend
# следуйте подсказкам, чтобы изменить комментарий
Тупые требования к формату комментариев к коммитам.
Черт, я закоммитила что-то в master, а оно должно быть в новой ветке!
# создайте новую ветку из текущего состояния master
git checkout -b имя-новой-ветки # удаляем коммит из ветки master
git checkout master
git reset HEAD~ --hard
git checkout имя-новой-ветки
# ваш коммит теперь живет в новой ветке :)
Примечание: это не сработает, если вы уже сделали push в origin. И если вы уже попробовали какие-то другие способы исправления, то может потребоваться сделать git reset HEAD@{число} (сдвигает “голову” на указанное количество коммитов). Бесконечная печаль.
Да блин, я случайно закоммитила не в ту ветку!
# откатываем последний коммит, но не удаляем изменения
git reset HEAD~ --soft
git add .
git stash # переключаемся на нужную ветку
git checkout имя-верной-ветки
git stash pop
git add .
git commit -m "тут ваш комментарий"
# теперь изменения в нужной ветке
Вот дерьмо, я запускаю diff, но ничего не происходит?!
git diff --staged
Чудно, но git не будет сравнивать файлы, которые были проиндексированы без этого флага. ¯\_(ツ)_/¯
Да пошло оно все, я сдаюсь.
cd ..
sudo rmdir fucking-git-repo-dir
git clone https://some.github.url/fucking-git-repo-dir.git
Благодарю @viaz66 за этот пункт.
Перевод статьи с сайта ohshitgit.com.