Подтвердить что ты не робот

Git переустановка на удаленные обновления

Я работаю с небольшой командой, которая использует git для управления исходным кодом. В последнее время мы ведем ветки тем, чтобы отслеживать функции, а затем объединять их в мастер локально, а затем перенаправлять их в центральный репозиторий git на удаленном сервере. Это отлично работает, когда в мастере не было внесено никаких изменений: я создаю свою ветку темы, фиксирую ее, объединять в мастер и затем нажимать. Hooray.

Однако, если кто-то перешел к происхождению, прежде чем я это сделаю, мои коммиты не ускоряются. Таким образом происходит слияние. Это также происходит, когда ветвь темы должна объединяться с мастером локально, чтобы мои изменения работали с кодом на данный момент. Итак, в итоге мы скомбинируем слияние, и git log конкурирует с браслетом дружбы.

Таким образом, переборка является очевидным выбором. Я бы хотел:

  • создать ветки тем, у которых есть несколько коммитов
  • мастер проверки и pull (ускоренная перемотка вперед, потому что я не поручил мастеру)
  • тема переадресации вступает в новый заголовок мастера
  • переустанавливать темы против мастера (так что темы начинаются с главы мастера), доводя мастер до моей темы

Мой способ сделать это в настоящее время приведен ниже:

git checkout master
git rebase master topic_1
git rebase topic_1 topic_2
git checkout master
git rebase topic_2
git branch -d topic_1 topic_2

Есть ли более быстрый способ сделать это?

4b9b3361

Ответ 1

Я со временем нашел свое любимое решение:

git checkout topic
# make [n] commits
git rebase -i HEAD~[n] #clean up time
git checkout master
git pull --rebase
git checkout topic
git rebase master
git checkout master
git merge topic
git push origin

Ответ 2

Знаете ли вы о git pull --rebase? Он переустанавливает, а не объединяется, когда вы тянете, и предотвращает загрязнение ваших сумм.

Вы также можете настроить его как поведение по умолчанию для ветки с параметрами конфигурации branch.<name>.rebase и branch.autosetuprebase.

Ответ 3

Для нашей команды мы устанавливаем что-то, что работает очень хорошо и вообще не использует rebase.

Мы сокращаем нашу работу в билетах Jira, которые не занимают слишком много времени, обычно на 1-2 дня. Каждый разработчик создает филиал на билет и работает на этой ветке. Когда он готов к совместному использованию, он будет перенесен на центральный сервер.

Центральный сервер контролируется сервером hudson CI, который извлекает изменения, объединяет все обновленные ветки, перестраивает программное обеспечение, запускает тесты и подталкивает все в центральный репозиторий master git.

Оттуда мы вернем его в наши репозитории. Мы регулярно (то есть каждые пару дней) объединяем наши рабочие ветки с центральным мастером, чтобы они "закрывались".

Так как никто не работает над машиной "слияния", и никто, кроме сервера CI, не прикасается к мастеру, у нас очень редко возникают проблемы с объединением (примерно в 1-2% от коммитов). И они быстро решаются на сервере сборки, очищая рабочее пространство. Мы обнаружили, что мы могли бы избежать большинства из них, удерживая ветки короткими и сливаясь с удаленным мастером, прежде чем нажимать.

Я также считаю, что слияние гораздо более надежное, чем перезарядка, и требует гораздо меньше переделок.

Ответ 4

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

git checkout topic_1
git rebase refs/remotes/origin/master

Которая избавляет от необходимости вытягивания (по крайней мере, до EOL вашей ветки функций). Наш процесс использует запросы на выбор GitHub, поэтому мне не нужно делать это локально.