В git не принято создавать копии папки для работы с различными функциями, потому что ветвление очень легкое и легко переключать ветви внутри одной папки.
Тем не менее, если проект большой, сложный в настройке или для тестирования каждой функции требуется много внешних настроек, может быть проще работать в отдельных папках.
Для git каждая папка представляет собой отдельный репозиторий, поэтому предположим, что у вас есть папки для функций X, Y и github repo G, тогда это означает, что у вас фактически есть 3 отдельных репозитория: X, Y и G.
Один из способов сделать то, что вы хотите, - это сначала подготовить репозиторий X по своему усмотрению и синхронизировать его с G, используя git pull / push. Затем вы готовите репозиторий Y и синхронизируете его также с G.
В итоге у вас все еще будет 3 отдельных репо, но у каждого будут ветки feature-x, feature-y и master с одинаковыми коммитами.
Итак, если вы находитесь в папке X, чтобы создать ветку «feature-x» из текущего состояния и переключиться на нее, вы будете использовать:
git checkout -b feature-x
Полагаю, вы уже сделали свои коммиты, и git log
выглядит хорошо.
Затем вы синхронизируетесь с «G», выполнив git push
. Это добавит ветку feature-x
и ваши новые коммиты к G.
На этом этапе вы можете перейти к github и создать запрос на извлечение, который можно объединить с мастером через веб-интерфейс.
Если вы не хотите делать это через веб-интерфейс запроса на извлечение, вы просто сначала подготовите свою основную ветвь в папке X к желаемому состоянию, где самое простое:
git checkout master
git merge feature-x
И затем вы синхронизируете основную ветвь X и G, используя git push
.
Наконец, повторите тот же процесс для Y и других функций.
Примечание: первое, что нужно сделать в репозитории объектов Y, это получить новое состояние мастер-ветви из репозитория github G, это делается с помощью git pull
.
git checkout master
git pull
Убедитесь, что ваш мастер в Y на этом этапе не изменился, потому что в противном случае он объединит состояние G мастера с вершиной состояния Y мастера. git fetch
является альтернативой git pull
, которая не выполняет слияние.
Если оно было изменено, для резервного копирования вашего состояния без переключения ветви выполните git branch feature-y
и восстановите мастер в исходное состояние на git reset --hard origin/master
. Тогда это безопасно сделать git pull
.