Я клонировал репозиторий и сделал некоторые коммиты:
git clone ...
git add
git commit
git add
git commit
git add
git commit
Теперь я понял, что будет лучше переместить все мои фиксации в другую новую ветку. Каков наилучший способ сделать это?
Я клонировал репозиторий и сделал некоторые коммиты:
git clone ...
git add
git commit
git add
git commit
git add
git commit
Теперь я понял, что будет лучше переместить все мои фиксации в другую новую ветку. Каков наилучший способ сделать это?
легко, проверьте свою новую ветку, затем переместите старую ветку (допустим master
и 3 фиксации) назад:
git checkout -b my_new_branch
git branch -f master HEAD~3
knittl answer работает, но есть и другие способы сделать это.
Я предполагаю, что вы находитесь на master
, когда вы впервые клонировали этот репозиторий, главная ветвь будет соответствовать главной ветке в клонированном репозитории. Это origin/master
. Поскольку ваш вопрос начинается с clone
, это справедливое предположение.
Итак, после того, как вы сделали свои фиксации на главной ветке, вы теперь опережаете ветвь origin/master
.
Первое, что вы делаете, это создать новую ветку
git branch new_branch
Примечание. Эта команда просто создает новую ветку, но не переключает ветки. Таким образом, master
и new_branch
теперь указывают на одно и то же commit, но вы все еще находитесь в ветки master
.
Следующее, что нужно сделать, - установить текущую ветвь (которая master
) в состояние, которое было до того, как вы добавили фиксации. Это то же самое состояние, что и origin/master
, поэтому вы выдаете эту команду
git reset --hard origin/master
Это устанавливает текущую ветвь в то же состояние, что и origin/master
. --hard
устанавливает индекс и рабочее дерево в исходное состояние. Есть другие флаги, но они не делают то, что вы хотите здесь. ( Внимание. Если у вас были незафиксированные изменения в рабочем дереве, они теперь выбрасываются. Используйте git stash
в этом случае перед reset.)
Итак, теперь вы находитесь на master
, который указывает на то же состояние, что и origin/master
, все, что вам нужно сделать, это перейти к новой ветке:
git checkout new_branch
Да, это немного длиннее (3 команды вместо 2), но вам не нужно подсчитывать, сколько коммитов вы должны вернуться, и это будет работать, даже если вы разветвлены, и переустановлено; и я объясню другие способы делать вещи в Git.
Создайте новую ветвь, затем reset головка в начало/мастер
git branch new_branch
git reset --hard origin/master
Внимание. Эта последняя команда отменит все, что у вас есть в вашей рабочей копии и еще не зафиксирована. Используйте git stash
раньше, если есть что-то, что вы хотите сохранить.
Затем проверьте свою новую ветку
git checkout new_branch