Объединить ветвь 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"