Вопрос

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

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

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

  • В лучшем хранилище мы должны сделать один коммит для одной ошибки с официальным сообщением GIT

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

Это было полезно?

Решение

Скажем bugfix И вы хотите объединить это в master:

git checkout master
git merge --squash bugfix
git commit

Это займет все коммиты от bugfix вель master ответвляться.


Объяснение:

git checkout master

Переключается на ваш master ответвляться.

git merge --squash bugfix

Берет все коммиты из bugfix ветвь и объединяет его с вашей текущей ветвью.

git commit

Создает единый коммит от объединенных изменений.

Опустив -m Параметр позволяет изменить проектное сообщение о коммите, содержащее каждое сообщение из ваших раздавленных коммитов, прежде чем завершить ваш коммит.

Другие советы

То, что наконец очистило это для меня, было комментарий показывая это:

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 Получил мне результат, который я хочу, от единого коммита для объединения целой филиала. И мне нужно сделать только один ручной разрешение конфликта.

Вы хотите слиться с опцией сквоша. Это если вы хотите сделать это по одной ветви за раз.

git merge --squash feature1

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

git checkout feature1
git rebase -i master

Спред в один коммит, затем повторите для других функций.

git checkout master
git merge feature1 feature2 feature3 ...

Это последнее слияние - «слияние осьминога», потому что оно сразу объединяет много ветвей.

Надеюсь это поможет

Если у вас уже есть git merge bugfix на 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 Филиал совершает, что вы можете настроить.

Я подробно объясняю это здесь: https://youtu.be/fqnaiacelt4

Я знаю, что этот вопрос не о GitHub конкретно, но так как GitHub так широко используется, и это ответ, который я искал, я поделюсь им здесь.

GitHub имеет возможность выполнять слияние сквоша, в зависимости от параметров слияния, включенных для репозитория.

Если слияния сквош включены, опция «Сквош и слияние» должна появиться в раскрывающейся спине под кнопкой «слияние».

Screenshot of "Squash and merge" Github feature

Предположим, вы работали в функции/Task1 с несколькими коммитами.

  1. Перейдите в филиал своего проекта (Project/MY_PROJECT)

    git checkout project/my_project
    
  2. Создайте новую филиал (функция/task1_bugfix)

    git checkout -b feature/task1_bugfix
    
  3. Мардж с --squash вариант

    git merge --squash feature/task1
    
  4. Создать единый коммит

    git commit -am "add single comments"
    
  5. Толкнуть свою ветвь

    git push --set-upstream origin feature/task1_bugfix
    

Для git

Создать новую функцию

через терминал/оболочка:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

Это не совершает его, позволяет сначала просмотреть его.

Затем совершите функцию и завершите функцию из этой новой ветви, и удалите/игнорируйте старый (тот, на котором вы сделали).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top