2011-12-22 3 views
5

Предположим, что у меня есть ветвь mainline и ветвь функции. Я много раз объединял ветвь mainline в ветку признаков, но у меня было только несколько очень незначительных конфликтов слияния. Я хочу очистить историю, чтобы в конце было только одно слияние. Каков наилучший метод для этого?Объединение объединяется в одно слияние

+1

Когда вы говорите, очистить историю, вы должны быть более конкретными. Если вы хотите удалить слияния из mainline в функцию, вам нужно решить, как вы хотите, чтобы ветвь функции выглядела с удалением этих объединений. Например, если какая-либо работа в ветви функции зависит от изменений, сделанных в mainline (и впоследствии объединенных в ветви функций), удаление слияний приведет к тому, что ваша ветка свойств больше не будет скомпилирована, потому что она зависит от кода, который был удален. –

+0

@KevinBallard: Это действительная точка. В некоторых случаях вам может понадобиться сдвинуть ветвь. Я не слишком обеспокоен этим, хотя для этого вопроса я просто хочу убедиться, что ветвь только сливается назад – Casebash

ответ

1

Вы изучали git rebase?

git co -b temp_feature feature 
git rebase master 

Это должно игнорировать слияния, но вам придется повторно разрешать конфликты. Он также создает ветку temp_feature для более легкого возврата, но то же самое можно было бы сделать с помощью reflog.

(Неправильный ответ ниже: это позволит создать одну фиксацию, ни одного объединения: - /)

Я думаю, что проще всего сделать следующее:

git co master 
git merge --squash feature 

Это позволит создать одну фиксацию от всей ветви функции. Если вы не хотите, чтобы ветвь функции сделать:

git branch -D feature 
1

Вы можете сделать интерактивный Rebase для достижения этой цели, но вы должны делать это только если вы еще не поделился, что история с кем-то еще. На практике это означает, что вы должны сделать это только в том случае, если вы не сделали git push для общего репо.

1

Похоже, что вы хотите, чтобы cherrypick non-merge фиксировал ветку функции в ветви чистой функции, а затем, наконец, объединил ветвь чистой функции с последним мастером (что бы это ни было). Вы можете использовать rebase для ускорения части этого вишневого рисунка, который, к сожалению, я не знаю о хорошем способе сделать в jiffy, так как это не то, что я делаю очень часто. Это поможет, если у вас есть gui, который позволяет вам выбрать несколько коммитов, которые будут черрипироваться сразу.

Edit: Это было бы более конкретное решение: How to cherry pick a range of commits and merge into another branch

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