Git squash все фиксируются в ветке без конфликтов
Обычный рабочий процесс разработки для нас - это checkout branch b
, передать ему кучу, затем сквоить все эти коммиты в один (все еще на b
).
Однако во время процесса rebase -i
для сквоша всех коммитов часто возникают конфликты с несколькими шагами.
Я по существу хочу изменить ветвь на один коммит, который представляет состояние репозитория во время окончательной фиксации на b
Я сделал несколько поисков, но я не нашел точно, что я ищу. Я не хочу merge --squash
, потому что мы хотели бы протестировать срезанную ветвь функции до слияния.
Ответы
Ответ 1
Если вам не нужна информация о фиксации, вы можете просто сделать мягкий reset. Затем файлы остаются такими, какими они были, и когда вы совершаете фиксацию, эта фиксация будет поверх коммита, который вы выполнили reset.
Чтобы найти фиксацию в reset, чтобы:
git merge-base HEAD BRANCH_YOU_BRANCHED_FROM
Тогда
git reset --soft COMMIT_HASH
Затем создайте коммит, возможно:
git commit -am 'This is the new re-created one commit'
Ответ 2
Это похоже на ответ от Расмуса, но разбитый на три шага, которые должны всегда срабатывать:
$ git merge feature1
$ git reset --soft [email protected]{1}
$ git commit -c feature1
Пояснение:
- Объединить и разрешить конфликты
- сохранить изменения, но reset для старой главы
- фиксировать все изменения с помощью сообщения фиксации и автора из последней ветки функции