Для фиксации в другой ветке
Независимо от того, зафиксировали ли вы уже ветку master
, просто создайте новую ветку и зафиксируйте ее там:
# quite litteraly "checkout a new branch called First-Level"
git checkout -b First-Level
# at previous step, as Arjun rightfully point out, omit -b if the branch exists
# add every change and commit (omit the "a" if you already staged specific changes)
git commit -am "Modified stuff in order to achieve a goal"
(........... если вы никогда не обращались к местному master
, вам здесь хорошо: -)
Исправление нежелательных коммитов на мастере
После коммита в новой ветке, как мы видели выше, проверьте вашу локальную историю с помощью git log
, чтобы найти коммиты, которые нужно «стереть» из master. Не беспокойтесь, они будут в безопасности на вашей First-Level
ветке.
(Если вы знаете, что вам нужно только вернуться к нескольким коммитам, нет необходимости позволять git выводить длинную ненужную историю, обрезайте ее с помощью -n
, для n
коммитов обратно)
Я приму следующий вывод с -3
, но, конечно, адаптируюсь к вашему случаю:
commit 287a91bd66781331c996067bd09521ea0880be5f (HEAD -> First-Level, master)
Author: serendipity456 <someone@somewh.ere>
Date: Wed Feb 27 02:07:10 2019 +0100
Modified stuff in order to achieve a goal
commit 982ee15f5ec26818f9a563c3c7dd52041258669d
Author: serendipity456 <someone@somewh.ere>
Date: Sat Feb 23 15:17:52 2019 +0100
Changed a bunch of things in places
commit d9ad330f8acaaf4fdc0785b699efe2aa527507fe (HEAD -> origin/master)
Author: serendipity456 <someone@somewh.ere>
Date: Sat Feb 23 15:17:52 2019 +0100
Solid foundations for the game
Если в этот момент вы определите, скажем, последний коммит, d9ad330
(где удаленный * все еще указывает) как тот, на котором вы хотите, чтобы мастер остался, выполните следующее:
git checkout master
git reset --hard d9ad330
* (здесь, в моем примере, но вы не упомянули, использовали ли вы один)