Как синхронизировать две ветви в том же репозитории Git?

StackOverflow https://stackoverflow.com/questions/4010962

Вопрос

Вот общий рабочий процесс препятствий, который я часто сталкиваюсь:

Мастер - наша «стабильная» филиал

$ git status
# On branch master
nothing to commit (working directory clean)

Создать модуль на ветке

$ git checkout -b foo
$ echo "hello" > world
$ git add .
$ git commit -m "init commit for foo module"
$ git checkout master
$ git merge foo

работать на мастере или других отраслях

В течение следующих нескольких недель дополнительное количество кода будет привержено для освоения напрямую и другими филиалами. foo филиал пойдет нетронутым на этот период времени

возобновить работу / сделать обновления на Foo Fiving

$ git checkout foo

о нет! foo очень устарел! я понимаю Зачем, но я делать нужно foo назад в синхронизации.

вопрос

Как мне получить последнее содержание от master ветвь?

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

Решение

Если вам не нужна ветка вокруг:

Если вы объединили Foo обратно в Master, «Git Firection -D Foo», чтобы убить ветку темы, а затем «Оформить заказ -B Foo» в будущем, когда вам нужно снова взломать.

Если вам нужна ветка вокруг:

Вы можете передать свою тему ветвь против главной ветки:

git checkout foo
git rebase master

Или:

git rebase master foo

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

Передача - это процесс перемещения или объединения последовательности коммитов на новую базу. Ремонт наиболее полезен и легко визуализируется в контексте функции разветвленного рабочего процесса. Общий процесс может быть визуализирован как следующее:

Git Rebase visual explanation

В приведенном ниже примере сочетается в себе Git Rabase с Git Merge для поддержания линейной истории проекта. Это быстрый и простой способ убедиться, что ваши слияния будут быстро направлены.

# Start a new feature
git checkout -b new-feature master
# Edit files
git commit -a -m "Start developing a feature"

В середине нашей особенности мы понимаем, что в нашем проекте есть безопасность

# Create a hotfix branch based off of master
git checkout -b hotfix master
# Edit files
git commit -a -m "Fix security hole"
# Merge back into master
git checkout master
git merge hotfix
git branch -d hotfix

После слияния исправления на мастер, у нас есть история проложена проекта. Вместо простого Git Merge мы интегрируем филиал функции с помощью ребазы для поддержания линейной истории:

git checkout new-feature
git rebase master

Это перемещает новую функцию на верхушку мастера, что позволяет нам делать стандартное быстрое направление от Master:

git checkout master
git merge new-feature

Взято из Учебное пособие в Атласское GIT

Я использую следующее для объединения изменений с двух ветвей (Mews и вашего) и синхронизировать оба ветвями для продолжения работы. Это, кажется, работает. Кто-нибудь увидит проблему с этим?

git checkout mine # make sure I'm on my branch
git commit -a     # commit changes
git push origin mine  
git checkout yours # switch to your branch
git pull origin yours # get changes you've committed & pushed
git checkout mine 
git merge yours # merge your changes into mine
git push origin mine 
git checkout yours 
git rebase mine # set your branch to the merged result
git push origin yours # push the merged result up to your branch on origin
git checkout mine # get back to my branch
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top