UPDATE:
Рабочий процесс, облегчающий работу с ответвлениями, представлен здесь: http://dymitruk.com/blog/2012/02/05/branch-per-feature/
(SVN часть вопроса была дана в конце)
Да, вот как вы снова вводите функцию, которую вы раскрыли. Рассмотрим следующую историю (предполагается, что вы «отменили» слияние):
x---x----x--x---x--M--U--L
\ /
x--x--x--x-F
F - это ветвь объекта, M - это слияние, U - противоположность, когда вы сливаете эту функцию, L - последний коммит.
Вот ваш выбор:
вернуть U (нет --force
необходимо нажать):
x---x----x--x---x--M--U--L--^U
\ /
x--x--x--x-F
переместите F на L (а затем объедините --ff-only F'
) (нет необходимости нажимать --force
):
x---x----x--x---x--M--U--L
\ / \
x--x--x--x-x x'--x'--x'--x'--F'
перебазировать F на L (а затем объединить --no-ff F'
- сохраняет вашу новую точку ветвления) (нет - необходимо принудительно нажать):
x---x----x--x---x--M--U--L-------------------M2
\ / \ /
x--x--x--x-x x'--x'--x'--x'--F'
rebase -i head^^
и исключить U из списка (необходимо нажать --force
) :
x---x----x--x---x--M--L
\ /
x--x--x--x-F
rebase --onto M^1 L^ L
чтобы избавиться от слияния и слияния. Теперь вы можете вернуться к F позже.
L'
/
x---x----x--x---x--M--U--L
\ /
x--x--x--x-F
Чтобы уничтожить все коммиты функций, используйте модификатор --squash
при первоначальном слиянии. Я позволю вашему воображению работать над тем, как это будет выглядеть в истории. Есть причина, по которой я не рекомендую это делать. Важно знать, как работает функция и какие шаги она предприняла. Последующие слияния будут проще, поскольку Git может изучить историю того, почему определенный файл выглядит так. Сокращение коммитов вместе теряет эту информацию.
Существуют дополнительные недостатки, которые могут повлиять или не повлиять на вашу способность воспользоваться историей перевоплощений.
То, что я рекомендую, всегда отмечать то, что высвобождается, пустым слиянием в master Это делается путем слияния с опцией --no-ff
. Вы никогда не работаете над мастером, и единственные коммиты, которые выполняются, это слияния - без изменений кода. В ветке QA вы отмечаете коммит, который отмечает точку, в которой вы выпустили. Поэтому, когда вы выполните git merge --no-ff rc-12.2
, вы автоматически сгенерируете комментарий коммита «merged rc-12.2».
Проверьте git-flow.
Надеюсь, это даст вам больше деталей.