Оптимальный рабочий процесс / стратегия git для запросов на извлечение проектов с открытым исходным кодом

Я ищу четкую, простую и оптимальную стратегию для работы над публичным проектом, которая включает в себя:

  1. потянув последние изменения
  2. добавив мою работу на вершине истории
  3. отправка запроса на просмотр с чистой историей

Под оптимальным я подразумеваю минимальное количество шагов, а главное -

Максимальная автоматизация и минимальный шанс создать конфликт.


В моей настройке я работаю на моем местном dev ветка. Скажи, что я решил, что он готов к запросу. Каковы мои шаги и какие правила нужно соблюдать, чтобы избежать неприятностей?

  1. Сначала я должен убедиться, что мой самый последний commits находятся на вершине текущей истории. Так что мне нужно rebase мои новые коммиты поверх самых последних публичных изменений. Я не хочу merge чтобы избежать дополнительных merge commit, который не представляет общественного интереса:

    git rebase origin / master dev

  2. Теперь мой новый commit история чиста и стоит на вершине самой последней публики master ветка. Я не могу push это прямо к публике origin так как у меня нет доступа к записи. Вместо этого я помещаю его в свой раздвоенный удаленный репозиторий на Github. Но вот вопрос:

В какую удаленную ветку я должен его подтолкнуть?

Проблема в чистой истории - я хочу, чтобы удаленная ветвь была точно такой же, как моя локальная dev, Таким образом, лучшим кандидатом, кажется, является новая ветка, клонированная из origin/master:

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

  1. Теперь у меня есть точная копия origin/master в моем раздвоенном репо, как говорят мои новые ветви new-feature-x, Мне нужно обновить его, чтобы стать точной копией моего местного dev ветка:

Какой самый простой и надежный способ сделать это?

  1. Так что, надеюсь, теперь у меня есть филиал new-feature-x на моем раздвоенном репо, которое я могу отправить для запроса на получение origin Сделки РЕПО. Предполагая (и надеясь), что не будет никаких конфликтов, этот шаг прост.

Так что это будет идеальная стратегия, если у вас будут хорошие ответы на поставленные выше вопросы.

Любая помощь приветствуется!


РЕДАКТИРОВАТЬ.

Многие источники ссылаются на успешную модель ветвления Git. Тем не менее, это не подходит для публичных проектов со многими соавторами. Публичный проект может даже не иметь development ветка или что-нибудь подобное. И иметь такую ​​ветку в моем локальном репо на неопределенный срок может быть проблематично обновлять его любыми принятыми / исправленными / отклоненными запросами на получение и т. Д.

Кроме того, эта модель предлагает вести все записи слияния. Но мои внутренние слияния бесполезны для публики, только добавляя ненужные накладные расходы. Как упоминалось выше, я хочу сделать Pull Request с чистой историей, чтобы сделать работу сопровождающих максимально простой.


Я нашел следующую команду чрезвычайно полезной перед любым push:

git pull --rebase upstream master

Здесь я использую удаленный, называемый "upstream" для публичного репо (и "origin" для моего собственного форка).

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

Сделав это, вы получите гораздо меньше шансов получить конфликты при выполнении фактического запроса на удаление.

1 ответ

Как только вы разветвились, вы должны немедленно git checkout -b feature-branch (с соответствующим описательным названием для feature-branch конечно). Как только вы добавили коммиты локально, вы выполняете git push -u origin feature-branch создать эту ветку на вашей удаленной ветке. Будущие изменения в этой ветви не требуют этих параметров.

После того, как вы завершили свою работу, вы просто отправляете запрос на извлечение в любую ветвь, указанную в проекте. Это может быть master или же dev или что-то еще, в зависимости от руководящих принципов.

Я бы предостерег от использования git rebase слишком много, потому что, если кто-то еще потянул ту же ветку, то вы сделали git push -f тогда вдруг у вас две разные истории, и могут случиться плохие вещи.

Дополнительное чтение:

Другие вопросы по тегам