2013-06-26 4 views
2

Я использую git-svn для взаимодействия с нашим хранилищем Subversion на работе. Я создал ветку (назовем ее FeatureBranch), чтобы работать над новой функцией, но ей пришлось переключиться обратно на главную ветку, чтобы работать над чем-то другим. Когда я начал работать над тем, что должно было быть сделано на FeatureBranch, я забыл проверить FeatureBranch снова и сделал несколько коммитов в мастер-ветку, прежде чем осознать, что я сделал.Можно ли объединить ветку в git и сохранить историю?

я первоначально планировал делать следующее, чтобы исправить это (я до сих пор не dcommitted моих изменений в Subversion, так что все они группируются вместе, как самые последние коммиты я сделал):

git checkout FeatureBranch 
git merge master 
git checkout master 
git reset --hard HEAD~n 

где n - это количество коммитов, которые я хочу удалить из основной ветки, так как они теперь будут в FeatureBranch. Однако git merge, похоже, не сохраняет историю при слиянии с другой ветвью (она отображается как одно коммит). Как вы объединяете только определенные коммиты в git в другую ветку, сохраняя историю? Я уже слышал термин cherry-pick, это функциональность, над которой я должен смотреть?

ответ

2

Да, вы бы хотели использовать git cherry-pick для этого. Вы будете совершенно буквально вишневый выбор каждый фиксатор вы хотите вернуть к хозяину.

Не объясняя весь процесс вишневого подборщик, вот некоторые Docs, которые get вы started

+0

Спасибо, я проверю их. Я всегда опасаюсь пробовать новые вещи с Git-Svn, прежде чем подтвердить, что они будут работать. –

+1

Это работало как шарм, спасибо. К счастью, было только около 8 коммитов, которые мне нужно было исправить, и я был бы более сумасшедшим для себя (очень утомительно!) –

+0

Плохо, я пробовал раньше, но он сказал, что должен ждать –

0

Вы можете добиться того, что с git rebase --onto. см. git help rebase для деталей.