В тот момент, когда Git делает мою голову, я не могу найти лучшее решение для следующего.
Есть две ветви, одна называется master, а другая называется mobiledevicesupport . Я хочу сохранить мобильную поддержку устройств как непрерывную ветвь, которая будет объединена / синхронизирована с главной веткой всякий раз, когда мобильная поддержка устройств стабильна. Это объединит изменения из поддержки мобильных устройств в мастер, но также перенесет все изменения из мастера в поддержку мобильных устройств, чтобы можно было продолжить работу над веткой и улучшить или дополнить функции. Это необходимо для работы с центральным хранилищем и несколькими разработчиками.
Пожалуйста, пример подобных рабочих процессов, которые используют другие люди, или просто скажите мне, если эта идея глупа, и я должен рассмотреть другие варианты. На данный момент рабочий процесс кажется нормальным, но я просто не знаю, как я могу заставить git работать таким образом.
Спасибо, вся помощь очень ценится.
Обновление 1: если я должен был объединить мастер с поддержкой мобильных устройств и поддержку мобильных устройств с мастером, получу ли я реплицированные коммиты в обеих ветвях. Или git достаточно умен, чтобы понять, что я перенес последние изменения из ветви A в ветку B и добавил коммит слияния C в ветку B. И я вытащил последние изменения из ветви B в ветвь A и добавил коммит слияния D в ветку A?
Я собирался опубликовать изображение, но у меня не достаточно репутации для него, поэтому я думаю, что следующая иллюстрация будет делать. Две ветки непрерывно бегут, слияния часто идут в обоих направлениях. Главное, в чем я не уверен, так это то, как git будет проигрывать коммиты и будет ли он заполнять ветку коммитами из другой ветки при слиянии или останется чистым. Раньше я использовал rebase, но, похоже, он заканчивает ветку и помещает все коммиты в мастер, или я сделал это неправильно. Спасибо за помощь до сих пор.
master
A--B--C-----H--I--J--M--N
\ / \
mobile \ / \
D--E--F--G--------K--L
Ответы:
да просто сделай
поддерживать мобильную поддержку устройств в синхронизации с мастером
затем, когда вы будете готовы включить поддержку мобильных устройств в master, сначала объедините master как описано выше, затем ...
и это все.
здесь предполагается, что mobilexxx - это тематическая ветка с работой, которая еще не готова перейти в вашу основную ветку. Таким образом, только слиться с мастером, когда mobiledevicesupport находится в хорошем месте
источник
Всякий раз, когда вы хотите получить изменения от мастера в свою рабочую ветку, выполните a
git rebase <remote>/master
. Если есть какие-либо конфликты. разрешить их.Когда ваша рабочая ветвь готова, перезагрузите ее, а затем выполните
git push <remote> HEAD:master
. Это обновит основную ветку удаленно (центральное хранилище).источник
git branch --contains <commit>
.Подход concept47 - верный способ сделать это, но я бы посоветовал объединить его с параметром --no-ff, чтобы сохранить историю ваших изменений.
источник
Да, я согласен с вашим подходом. Для объединения поддержки мобильных устройств в мастер вы можете использовать
Точно так же вы можете также объединить мастер в поддержке мобильных устройств.
В. Если перекрестное слияние является проблемой или нет.
О. Ну, это зависит от коммитов, сделанных в ветке mobile * и master ветке с момента их последней синхронизации. Возьмите этот пример: после последней синхронизации с этими ветками происходят следующие коммиты
Теперь предположим, что commit B внес некоторые изменения в файл a.txt, а commit D также внес некоторые изменения в a.txt. Давайте посмотрим на влияние каждой операции слияния сейчас,
Теперь возможны два типа слияния
Git сначала попытается объединить FF, и если он обнаружит, что какие-либо конфликты не разрешаются с помощью git. Он не сможет объединиться и попросит вас объединить. В этом случае произойдет новый коммит, который отвечает за разрешение конфликтов в .txt.
Таким образом, суть в том, что перекрестное слияние не является проблемой, и в конечном итоге вы должны это сделать, и именно это означает синхронизация. Убедитесь, что вы запачкали руки в объединяющихся ветвях, прежде чем делать что-либо на производстве.
источник
Принятый ответ с помощью git merge выполнит работу, но оставит беспорядочную фиксацию, верный путь должен быть «перебазирован» с помощью следующих шагов (при условии, что вы хотите сохранить свою ветку Feature в sycn с Develop до того, как вы сделаете последний push перед PR ).
1
git fetch
из вашей ветки функций (убедитесь, что ветка функций, над которой вы работаете, обновлена до даты)2
git rebase origin/develop
3 если возникнет конфликт, разрешите их один за другим
4 используйте, как
git rebase --continue
только все конфликты разрешены5
git push --force
источник
Вы думаете в правильном направлении. Объединяйте master с поддержкой mobiledevices постоянно и объединяйте поддержку mobiledevices с master, когда поддержка mobiledevices стабильна. Каждый разработчик будет иметь свою собственную ветку и может объединяться с поддержкой master или mobiledevices в зависимости от их роли.
источник