Коротко: случайный коммит в master легко исправить: переносим его на новую ветку через cherry-pick, а из master убираем через reset --hard.
Если вы случайно закоммитили и запушили в master, а работа должна была идти в отдельной ветке, — это легко исправить: переносим коммит на новую ветку через cherry-pick, а из master убираем его через reset --hard. Разберём по шагам.
Допустим, находясь на ветке master, мы уже сделали ненужный коммит:

Что происходит на скриншоте:
- находясь на
master, выполняемgit status— проверяем, что изменений нет.
Чтобы пользоваться удобной командой git lg, заведите алиас:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --"
- вызываем
git lg, чтобы просмотреть коммиты текущей ветки; - видим, что на
masterвсего 1 коммит; - создаём файл
12.txtи коммитим его вmaster, воспроизводя кейс «случайно закоммитился в master»; - снова вызываем
git lgи видим уже 2 коммита — исходный плюс только что сделанный.
Теперь переносим коммит 0286b6f на другую ветку. Для этого:
- переключаемся на коммит, от которого хотим создать новую ветку (
eace0c2— тот, что шёл перед переносимым):git checkout eace0c2; - создаём от него новую ветку
develop:git checkout -b develop.

- находясь на
develop, выполняемgit cherry-pick 0286b6f— указав номер переносимого коммита; - через
git lgпроверяем, что наdevelopтеперь 2 коммита: базовый и подтянутый через cherry-pick; - выполняем
git push --set-upstream origin develop, чтобы запушить новую ветку; - переключаемся на
master:git checkout master; - на
masterвыполняемgit reset --hard HEAD~1, стирая лишний коммит; git push -f— отправляем изменения в удалённыйmaster.
Готово. Теперь коммит находится на ветке develop, а в master его нет.