Как использовать git merge --squash, предотвращая регулярные коммиты с помощью git hooks

Я хотел бы, чтобы коммиты не выполнялись с использованием локального хука фиксации в соответствии с ответом на https://stackoverflow.com/a/40465455/329496

Это отлично работает, так как теперь я могу объединить изменения в ветках функций в мастер:

git merge feature_branch

На самом деле я хочу использовать слияние сквоша, чтобы готовые функции попадали в единую фиксацию на мастере:

git merge --squash feature_branch

На самом деле это не объединяет, а создает сжатые изменения в виде измененных файлов в моем индексе. Затем я должен зафиксировать эти изменения индекса, но я отключил фиксации для мастера.

Есть ли способ предотвратить коммиты в master, а также обеспечить автоматическое уничтожение работы, объединенной из веток функций?


person simbo1905    schedule 19.11.2018    source источник


Ответы (1)


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

Однако есть обходной путь. Вы можете создать другую ветку (скажем, master-merge), запустив git checkout -B master-merge master и выполнив там сквош, а затем перемотать вперед к master, используя git merge --ff-only master-merge, находясь на master. Тогда на master не делается никаких фактических коммитов, только быстрая перемотка вперед.

person bk2204    schedule 20.11.2018