Подтвердить что ты не робот

Создать ветвь с N-последними коммитами

Я клонировал репозиторий и сделал некоторые коммиты:

git clone ...
git add
git commit
git add
git commit
git add 
git commit 

Теперь я понял, что будет лучше переместить все мои фиксации в другую новую ветку. Каков наилучший способ сделать это?

4b9b3361

Ответ 1

легко, проверьте свою новую ветку, затем переместите старую ветку (допустим master и 3 фиксации) назад:

git checkout -b my_new_branch
git branch -f master HEAD~3

Ответ 2

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.

Ответ 3

Создайте новую ветвь, затем reset головка в начало/мастер

git branch new_branch
git reset --hard origin/master

Внимание. Эта последняя команда отменит все, что у вас есть в вашей рабочей копии и еще не зафиксирована. Используйте git stash раньше, если есть что-то, что вы хотите сохранить.

Затем проверьте свою новую ветку

git checkout new_branch