Перебаза мерзавцев / объединяется для общедоступных выпусков

структура в память о example_struct подобном этому в Example_Class

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

Однако ответ "да, на моей машине", при условии, что Example_Class не содержит виртуального метода (и не наследовался базовому классу).

5
задан Neil 25 September 2009 в 21:26
поделиться

2 ответа

Конечно, если ваши коммиты и стоит сохранить, и составляют вашу работу над общедоступным релизом, тогда они должны быть частью вашей опубликованной истории? Если вы не хотите публиковать полную историю репозитория, вам может быть лучше просто использовать git archive для создания архивов релизов.

Сказав, что если вы действительно хотите создать ветку релиза с отдельная история, тогда можно. Тем не менее, вы настраиваете себя на дополнительные накладные расходы на обслуживание, поскольку вы никогда не сможете выполнить слияние из своей личной истории с веткой общедоступной версии, так как это внесет всю частную историю в ветку выпуска. Это то, что делает git; он отслеживает, откуда происходят изменения.

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

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

# Low-level plumbing command to switch branches without checking anything out
# (Note: it doesn't matter if this branch hasn't yet been created.)
git symbolic-ref HEAD refs/heads/release

# Create a new commit based on the current index in the release branch
git commit -m "Public release commit"

# Switch back to the private branch
git checkout private

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

7
ответ дан 14 December 2019 в 01:12
поделиться

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

Мой рабочий процесс для этого будет выглядеть примерно так:

git co -b release_branch_squash release_branch_with_all_commits

git rebase last_release_tag

Теперь пора разобраться со всеми конфликтами, которые могут возникнуть. Я действительно не знаю, как этого избежать. Но обычно это не проблема. Мой мерзавец В любом случае в репозиторий уже записано большинство разрешений конфликтов.

git rebase --interactive last_release_tag

Это вызовет vim. Для всего релиза, который я хочу сквош, я заменяю pick с сквошем . Затем просто сохраните и выйдите. Готово.

2
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: