Все команды не упомнишь...
git reflog # вы увидите список всего, # что сделали в git, во всех ветках! # у каждого элемента есть индекс HEAD@{индекс} # найдите тот, перед которым всё сломалось git reset HEAD@{index} # волшебная машина времени
# сделайте своё изменение git add . # или добавьте файлы по отдельности git commit --amend --no-edit # теперь ваш последний коммит содержит это изменение! # ПРЕДУПРЕЖДЕНИЕ: никогда не меняйте опубликованные коммиты!
Также можно сделать изменения в новом коммите и использовать rebase -i чтобы склеить оба коммита вместе, но так в миллион раз быстрее.
git commit --amend # открывает редактор для смены сообщения
Ё*аные требования по наименованию.
# создаст новую ветку из текущего состояния мастера git branch какое-то-имя-новой-ветки # удалит последний коммит из мастера git reset HEAD~ --hard git checkout какое-то-имя-новой-ветки # ваш коммит теперь живёт в этой ветке :)
это не будет работать, если вы уже отправили коммит в удалённую ветку, и если вы пробовали сделать это как-то по-другому, может помочь
git reset HEAD@{количество-коммитов-назад}
вместо HEAD~.
# отменяет последний коммит, но оставляет изменения доступными git reset HEAD~ --soft git stash # переключиться на нужную ветку git checkout имя-нужной-ветки git stash pop git add . # или добавьте отдельные файлы git commit -m "ваше сообщение здесь" # теперь ваши изменения на нужной ветке
Многие люди предлагали использовать cherry-pick в такой ситуации, так что выбирайте, то что вам больше нравится!
git checkout имя-нужной-ветки # скопировать последний коммит из мастера git cherry-pick master # удалить из мастера git checkout master git reset HEAD~ --hard
# найдите коммит, который нужно отменить git log # используйте стрелочки, чтобы прокрутить историю # сохраните хеш нужного коммита git revert [сохранённый хеш] # git создаст новый коммит, отменяющий выбранный # отредактируйте сообщений коммита # или просто сохраните
# найти хеш коммита, до которого нужно откатиться git log # используйте стрелочки, чтобы прокрутить историю # сохраните хеш нужного коммита git checkout [сохранённый хеш] -- путь/к/файлу # старая версия файла окажется в вашем индексе git commit -m "Ого, теперь не придётся копипастить, чтобы отменить изменения!"
# заберите старый репозиторий git clone https://some.github.url/чёртов-репозиторий-git.git # поменяйте ему урл на новый git remote set-url --push origin https://some.github.url/новый-репозиторий-git.git # синхронизируйте изменения git fetch -p origin git push --mirror # теперь ваши изменения на новом репозитории
# получить последнее состояние origin git fetch origin git checkout master git reset --hard origin/master # удалить неиндексированные файлы git clean -d --force # повторить checkout/reset/clean для каждой испорченной ветки
По мотивам https://ohshitgit.com/ru