Git Scared

Ох, твою мать, git!

Workafrolic (±∞)

--

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.

--

--

Workafrolic (±∞)

Frontend-дева. Верстаю, пишу и перевожу статьи, менторю, выступаю.