Объединить ветвь git без указателя перехода
Я ищу решение применить ветвь функции к ветке разработки в git без фактического перемещения указателя ветвления. По сути, я хотел бы создать отдельную фиксацию ветки функции и убедиться, что она как-то указывает на исходную ветвь (упоминание в журнале может быть достаточно).
Я знаю, что сложный git должен предлагать что-то подобное, хотя это приведет к появлению новых команд для стандартного рабочего процесса, которые я бы предпочел избежать.
То, что я пытаюсь достичь, - это какое-то управление функциями, которое позволяет нам применять/удалять целые функции, сохраняя при этом видимость самой ветки патча. Если я объединил ветвь, большинство команд, пытающихся изменить это изменение, не будут делать то, что я хочу, потому что ветка уже объединена в разработку.
Я не могу по-настоящему следить за восходящим потоком - иногда происходят параллельные изменения, которые легче корректировать, получая новый тег и повторно применяя только необходимые функции, вместо того, чтобы разрешать конфликты и возвращать избыточные функции, поэтому этот способ работы невозможен. С другой стороны, я хочу увидеть изменение, чтобы я мог либо переработать его в соответствии с новой версией, либо отправить вверх по течению в более позднее время.
Ответы
Ответ 1
Насколько я понимаю, вы можете использовать git rebase -i для достижения своей цели.
Ниже приведен сценарий, который вы хотите достичь...
A--B--C(develop)
\
\D--E--F(feature)
вы можете комбинировать D-E-F как единую фиксацию с именем G
окончательный результат будет
A--B--C--G(develop)
\
\D--E--F(feature)
G - это одно коммит, который имеет все вещи в D-E-F, и вы можете легко снять его с ветки разработки.
Итак, чтобы обработать эту операцию, вы можете сделать....
git checkout feature_branch
создать временную ветвь...
git checkout -b temp
git rebase -i develop_branch
и интерактивный редактор будет запрошен...
отметьте фиксацию D и E как сквош, сохраните последнюю строку (фиксацию) в качестве последнего сингла
сохранить и выйти
то фиксация G будет обновлена до вашей ветки разработки.
A--B--C(develop)--G(temp)
\
\D--E--F(feature)
Reset ваше развитие на commit G и удалите временную ветку, если хотите.
git checkout develop_branch
git reset --hard <shaSum of commit G>
git -D temp
Что это!
Ответ 2
На самом деле, есть более простой метод. Команда git merge
имеет опцию --squash
, которая просто накапливает все изменения из ветки, которая должна быть объединена, и добавляет их в промежуточную область.
Итак, вы можете делать то, что хотите, с помощью следующих команд (когда вы находитесь на главном сервере и хотите объединить функцию ветвления функции-foobar):
$ git merge --squash feature-foobar
$ git commit -m "Implemented feature: foobar"