2016-11-23 3 views
1

Я довольно новичок в git.Как создать ветку от нескольких коммитов назад?

В настоящее время у меня есть записи, изображенные ниже, которые были нажаты на пульте дистанционного управления. only 1 branch

Я создал ветку (branch1), когда мне пришлось начать строить ui. Но я понял, что должен был сделать вторую ветку, когда работал над другой функцией (в зеленом цвете).

Как получить от моей текущей настройки следующую настройку? Если это упростит работу, я работаю без других сотрудников.

separate branches

Обновление: Все ответы работали, я принял первый, который был представлен, но использовали комбинацию ответов. Чтобы отменить фиксацию, мы можем использовать инструмент интерактивной переустановки (Deleting a commit in Between other commits).

ответ

8

Не вишневый. Используйте git-rebase.

Вот где вы сейчас находитесь:

enter image description here

1) Создать новую ветвь во главе branch1:

git branch branch2 

enter image description here

2) Сброс branch1, где его голова должна быть:

Вы можете использовать либо git log найти хэш последней фиксации благе, или (в случае моего примера) использовать HEAD~2 вернуться два фиксаций.

git reset --hard <back-there> 

enter image description here

3) Переключение в branch2

git checkout branch2 

enter image description here

4) Rebase все отbranch1доbranch2 на master

git rebase --onto master branch1 

enter image description here

+0

Хорошо объяснил! –

+1

В качестве побочного примечания, 'git rebase', по сути, автоматизируется, однако для выполнения этой работы требуются команды' git cherry-pick'. Таким образом, «не выбирайте вишни, вместо этого перебазируйте» означает «не выбирайте вручную, используйте инструмент выбора электроинструмента». :-) – torek

+0

Хотя у меня есть конкурирующий ответ, я могу сказать бесконечно ... Это правильный ответ. – Pachonk

1

Это довольно удивительным, на самом деле!

Прежде всего, найдите хеш-фиксацию, которую хотите создать ветвь, используя git log. Скопируйте ша-хэш новой ветви.

Выполните следующую (с заменой ша хэш с фактическим ша):

git checkout 051ab99e1bb7359d7136d621d9feacfc82aa8721 
git checkout -b my-new-branch 
git push --set-upstream origin my-new-branch #optional, only if you want to push it to remote 

После этого, вы можете использовать git cherry-pick добавить зеленый совершает примерно так:

git cherry-pick SHA 
0
$ git checkout master    # go to master branch 
$ git checkout -b branch2   # create & checkout branch2 

$ git reflog      # copy commit hash of your two green commits 
$ git cherry-pick <commit-hash-1> # pick frist green commit 
$ git cherry-pick <commit-hash-2> # pick second green commit 

Ваш branch2 готов. Теперь вы должны отменить последние две фиксации ветки1 $ git checkout branch1 # go to branch1 $ git reset --hard HEAD~2 # undo last two commits

Смежные вопросы