По мотивам Oh shit, git!.
На самом деле Git не сложен:
git add .
git commit -m "new commit"
git push origin dev
Но иногда возникают случаи, когда этот цикл прерывается, и вот тогда, в силу незнания возникают проблемы.
Машина времени
“Господи, как все вернуть как было??” Да легко:
git reflog # выводим список коммитов...
git reset HEAD@{index} # ... и возвращаемся к нужному коммиту
Должно быть, крутая штука, и она обязательно должна быть в топе №1 must-have команд Git.
“Не тот комментарий к коммиту”
Пффф, не так сложно:
git commit --amend # меняем или оставляем комментарий к коммиту
Еще чуть-чуть дополнений к коммиту
Сделали коммит, но сразу вспомнили, что забыли что-то добавить? Не беда:
# делаем изменения
git add . # или git add some_file
git commit --amend # меняем или оставляем комментарий к коммиту
# теперь ваш последний коммит содержит эти изменения!
Такое часто бывает - из-за пропущенных пробелов, опечаток, лишних знаков.
“Я хотел закоммитить в новую ветку”
# создаем новую ветку
git branch new-branch
# жестко удаляем коммит из master ветки
git reset HEAD~ --hard
git checkout new-branch
# вуаля, теперь ваш коммит будет жить на новой ветке
Однако этот способ не работает если вы уже:
git push origin master
В таком случае вам придется воспользоваться машиной времени. Попробуйте не плакать. Плачьте как можно больше! (В переводе: “Бесконечная тоска”.)
“Я все-таки закоммитил не туда”
# удаляем последний коммит, но сохраняем изменения
git reset HEAD~ --soft
git stash
# переключаемся на нужную ветку
git checkout correct-branch
git stash pop
git add . # добавляем файлы в коммит
git commit -m "your message here"
# теперь ваши изменения на правильной ветке
На этом все.