Как использовать git merge --squash?
У меня есть удаленный сервер Git, вот сценарий, который я хочу выполнить:
для каждой ошибки / функции я создаю другую ветку Git
Я продолжаю фиксировать свой код в этой ветке Git с неофициальными сообщениями Git
в верхнем репозитории мы должны сделать один коммит для одной ошибки с официальным сообщением Git
Итак, как я могу объединить свою ветку с удаленной веткой, чтобы они просто получили одна фиксация для всех моих чекинов (я даже хочу предоставить сообщение фиксации для этого)?
6 ответов:
скажем, ваша ветка исправления ошибок называется
bugfixи вы хотите объединить их вmaster:git checkout master git merge --squash bugfix git commitэто займет все коммиты от
bugfixветвь, раздавить их в 1 фиксации, и объединить его с вашимmasterфилиала.
объяснение:
git checkout masterпереключается на свой
masterфилиала.git merge --squash bugfixпринимает все коммиты от
bugfixфилиал и объединяет его с текущим отделение.git commitсоздает одну фиксацию из Объединенных изменений.
пропуск
-mпараметр позволяет изменять черновик сообщения фиксации, содержащего каждое сообщение из ваших раздавленных коммитов, перед завершением фиксации.
вы хотите объединить с опцией сквош. Это если вы хотите сделать это по одной ветке за раз.
git merge --squash feature1Если вы хотите объединить все ветви одновременно с одиночными коммитами, то сначала перебазируйте интерактивно и раздавите каждую функцию, а затем Octopus merge:
git checkout feature1 git rebase -i masterсквош в одну фиксацию, а затем повторите для других функций.
git checkout master git merge feature1 feature2 feature3 ...Это последнее слияние является "слиянием осьминога", потому что оно объединяет много ветвей одновременно.
надеюсь, что это помогает
что, наконец, прояснило это для меня было комментарий показывает, что:
git checkout main git merge --squash featureэквивалентно делать:
git checkout feature git diff main > feature.patch git checkout main patch -p1 < feature.patch git add .когда я хочу объединить ветку функций с 105(!!) совершает и все они раздавлены в один, я не хочу
git rebase -i origin/masterпотому что мне нужно отдельно разрешать конфликты слияния для каждого промежуточных коммитов (или, по крайней мере, тех, которые git не может понять сам). Используяgit merge --squashполучает мне результат I требуется, из одной фиксации для слияния всей ветви объекта. И мне нужно только сделать не более одного ручного разрешения конфликтов.
Если вы уже
git merge bugfixonmain, вы можете раздавить слияние фиксации в один с:git reset --soft HEAD^1 git commit
слияние
newFeatureфилиала вmasterс пользовательской фиксацией:git merge --squash newFeature && git commit -m 'Your custom commit message';если вы
git merge --squash newFeature && git commitвы получите сообщение, которое будет включать в себя все
newFeatureфиксация ветвей, которую можно настроить.
Для Git
создать новую функцию
через терминал/основа:
git checkout origin/feature/<featurename> git merge --squash origin/feature/<featurename>Это не фиксирует его, позволяет вам сначала просмотреть его.
затем зафиксируйте и завершите функцию из этой новой ветви и удалите/проигнорируйте старую (ту, на которой вы делали dev).
Comments