Подтвердить что ты не робот

Объединить GIT ветвь без журнала фиксации

В настоящее время, когда я использую GIT, я создаю ветку для каждого задания и делаю различные коммиты до того, как закончу. Затем я сливаюсь обратно со своей главной ветвью и двигаюсь вверх по течению. У меня, вероятно, будет несколько веток в любой момент времени, а также прокручивать между ними среднюю работу по мере возникновения вещей.

Но большинство из этих коммитов - это просто пункты сохранения, т.е. не такие важные в великой схеме вещей. Поэтому, когда я объединяю ветвь, мне бы хотелось, чтобы журналы ветвей не сливались с основными журналами.

Есть ли способ просто слить сообщение журнала для commit g ниже (и не совершает c или e)?

a [master] 
|
b (create branch 'job')
|\
| \
|  c 
|  |
d  e
|  |
f  g (next step is to merge 'job' branch with 'master')
4b9b3361

Ответ 1

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

вы можете использовать g commit message для вашего объединения, а затем просмотреть историю с помощью опции --first-parent.

Если вы действительно хотите потерять историю из своей ветки, используйте git merge --squash, я не рекомендую ее, но

изменить

если вы не счастливы, потому что вы не считаете свою историю очень чистой, вы можете использовать git функцию переадресации:

вы можете ретроактивно редактировать старые и создавать новые коммиты из существующей ветки (фактически переписывая ее). он позволяет вам переписывать сообщения фиксации, разделить коммиты, сквош фиксируется в одну фиксацию, переупорядочивать коммиты и т.д.

вам следует использовать только перезагрузку, если вы еще не опубликовали свою ветку (т.е. это только частная ветвь), потому что она даст другим разработчикам головную боль и может вызвать проблемы с объединением позже, если кто-то продолжает работать над старым (до rebased).

Ответ 2

Я считаю, что merge -squash чрезвычайно полезен, когда я использую подход "branch to feature". Моя история фиксации во временных ветвях - полный мусор, абсолютно бессмысленный. И я действительно хочу больше не видеть эту историю, а не просто пропустить ее.

Когда коммиты переходят к просмотру кода, важно не создавать дополнительные коммиты.

Ответ 3

Как упоминалось в Обрезке GIT Проверка/Скручивание GIT История", если ваши коммиты c и e были выполнены с префиксом комментария с fixup!, тогда rebase --interactive --autosquash (git1.7 +, февраль 2010) может выполнить именно то, что вам нужно.

с директивой fixup!, вы можете сохранить, что это сообщение "невидимо" в сообщении фиксации, при этом все еще пользуется переадресацией автоматической фиксации с параметром --autosquash.

Для фиксации с префиксом fixup! вы можете определить псевдоним

[alias]
    fixup = !sh -c 'git commit -m \"fixup! $(git log -1 --format='\\''%s'\\'' [email protected])\"' -
    squash = !sh -c 'git commit -m \"squash! $(git log -1 --format='\\''%s'\\'' [email protected])\"' -

Затем псевдоним fixup будет применяться для тех "коммитов" (которые) являются точками сохранения, т.е. не столь важными в великой схеме вещей ".