git --ff-only --squash перебазировать ветку на master - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь автоматизировать сценарий git, в котором я хотел бы, чтобы коммиты из ветви, прежде чем он был объединен с мастером, были

1) rebased поверх мастера.

2) Может применяться --ff-only мастер.Я думаю, 1) покрывает это.Это правильно?

3) Я хотел бы раздавить его в один коммит, который можно применить поверх мастера, а затем объединить его.

Git, похоже, не предоставляет командамварианты для удовлетворения этих требований.Есть ли способ для меня достичь этой цели?

base_branch: M1->C1->C2 master_branch: M1->M2

Я хочу

1. base_branch: M1->M2->C1->C2 2. base_branch: M1->M2->C1->C2 3. base_branch: M1->M2->C 4. merge 5. master_branch: M1->M2->C

Я бы хотел поддерживать чистотуЛинейная история моего мастера, и все изменения сводятся к одному коммиту.Как я могу это сделать?

Примечание: если я преобразовываю изменения в патч и применяю поверх мастера, это завершается.Но я ищу мерзавец способ сделать это.

1 Ответ

0 голосов
/ 27 сентября 2018

Git не предоставляет автоматический способ сдавить коммиты во время перебазировки, как вы, вероятно, думаете.Тем не менее, git rebase предоставляет интерактивную перебазировку, которая имеет возможность сдавливать коммиты.Обычно, интерактивные ребазы, ну, в общем, интерактивные, и они порождают редактора.Тем не менее, вы можете указать команду оболочки в переменной окружения GIT_SEQUENCE_EDITOR, и она будет использоваться для редактирования этих коммитов.

Итак, чтобы сделать то, что вы хотите сделать более автоматизированным способом, вы могли бызапустите GIT_SEQUENCE_EDITOR="sed -i -e '2,\$s/^pick/squash/'" git rebase -i master, который изменит список задач, чтобы объединить все коммиты вместе.Затем Git предложит вам объединить сообщения коммита в одно.

Если вы ищете совершенно неинтерактивную ситуацию, вы можете изменить squash в приведенной выше команде на fixup, и этооставьте только первое сообщение коммита, отбрасывая остальные.

Обратите внимание, что в macOS вам может потребоваться изменить sed -i на sed -i '', поскольку его sed работает немного по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...