В моем рабочем процессе git у нас есть один основной репозиторий и один ветки, мастер. Все тянут от удаленного мастера, и все нажимают на удаленный мастер. Я хочу работать в своей ветке, пока я готовлю эту функцию. Пока что моя история выглядит примерно так:
git pull --rebase
git checkout -b new_feature
<make some commits>
git checkout master
git pull --rebase
Теперь я хочу объединить ветку и вот что мне нужно:
- В моей локальной ветки мастера не происходит слияния.
- Все коммиты, сделанные в моей ветке new_feature, сливаются с мастером, как если бы я сделал их мастером.
- Все объединенные коммиты объединяются где-то поверх моего локального указателя удаленной головки.
Моя самая большая проблема - пункт 3, когда это необходимо, чтобы я мог безопасно подталкивать изменения. Если объединенные коммиты переплетаются с коммитами перед головой, тогда у меня будут проблемы с нажатием, см. Связанную с этим проблему: git: нажатие одиночных коммитов, переупорядочение с помощью rebase, дублирование записей.
Я читал следующее:
- http://mettadore.com/2011/05/06/a-simple-git-rebase-workflow-explained/
- Сохранять историю событий после слияния git
- Как вы можете изменить текущие изменения в ветке поверх слияния в?
И я думаю, что мне нужно сделать:
git checkout master
git pull --rebase
git checkout new_feature
git rebase master
git checkout master
git rebase new_feature
git push
Я понимаю, что
git checkout new_feature
git rebase master
сделает new_feature таким, как если бы он был отделен от новой текущей головы. Это правда? И что
git checkout master
git rebase new_feature
поместит new_feature поверх мастера. Это верно? Если это так, это основной момент моей путаницы. Если "git мастер переадресации" помещает мастер в нижнюю часть new_feature, тогда почему "git rebase new_feature" помещает new_feature в верхнюю часть ведущего, т.е. Почему он не делает обратное?