Как использовать git merge --squash?



У меня есть удаленный сервер Git, вот сценарий, который я хочу выполнить:




  • для каждой ошибки / функции я создаю другую ветку Git


  • Я продолжаю фиксировать свой код в этой ветке Git с неофициальными сообщениями Git


  • в верхнем репозитории мы должны сделать один коммит для одной ошибки с официальным сообщением Git



Итак, как я могу объединить свою ветку с удаленной веткой, чтобы они просто получили одна фиксация для всех моих чекинов (я даже хочу предоставить сообщение фиксации для этого)?

754   6  

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 bugfix on main, вы можете раздавить слияние фиксации в один с:

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

    Ничего не найдено.