Объединить 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')
Ответы
Ответ 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
будет применяться для тех "коммитов" (которые) являются точками сохранения, т.е. не столь важными в великой схеме вещей ".