Моя компания находится в середине перехода от CVS к git. Мы долгое время работали на CVS, поэтому существует огромная история. Слишком много, чтобы сделать это вручную.Massive git commit squashing
Глядя на бревна, есть много раздавливаний, которые можно было бы сделать. Много. То, что я хотел бы сделать, это зацепить скрипт, который будет сравнивать два смежных коммита. Если он возвращает true, то конкатенируйте сообщения фиксации и раздавите коммиты. Я также был бы доволен командой, которая принимает два коммита и сообщение фиксации, а затем сжимает их вместе.
git rebase --interactive близок к тому, что мне нужно, но для «сквоша» требуется слишком много ручного вмешательства. Я также рассмотрел использование «fixup» вместо squash, но я не хочу потерять сообщения фиксации.
Любые идеи?
Я мог ошибаться, но это все равно не решит проблема «Конкатенация сообщений». Autosquash выглядит так же, как squash/fixup, но на основе сообщения commit. – Nycto
На самом деле, вы могли бы просто использовать фильтр-ветку, полностью забыть о rebase -autosquash. – dublev
Ваше предложение об фильтрующей ветке оказалось верным. Использование флага «commit-filter» позволяет обрабатывать каждую фиксацию во всем репо. Внутри сценария обратного вызова, с которым вы проходите, вы можете передать сообщение в команду commit-tree, чтобы изменить сообщение фиксации. Вы также можете вызвать skip_commit, чтобы объединить текущую фиксацию в следующую фиксацию. – Nycto