Github - нужна помощь в предоставлении запроса на тяну

Я разветкил проект, сделал изменения (C1) и дал запрос на pull, который все еще находится в ожидании. Через неделю я хочу дать другой запрос на перенос с изменениями (C2).

Между тем, вверх по течению (где я forked from) получает много изменений. Поэтому я хочу синхронизировать мой мастер с восходящим потоком, и вам нужно дать запрос на pull с изменениями C2 самостоятельно (нет необходимости добавлять изменения c1, потому что я уже дал отдельный запрос на растяжение).

Примечание. У меня нет ветвей. Я совершил С1 у своего хозяина и дал тянуть запрос. Были изменения C2. Но на этот раз я не знаю, где взять C2 и как оттянуть запрос без добавления C1.

Ответ 1

Если вы сделали C2 в своей собственной ветке, все, что вам нужно сделать, это:

  • обновите своего хозяина вверх/вниз.
  • переформатируйте свою ветвь C2 сверху вверх/мастер
  • сделайте запрос на извлечение из ветки C2.

enter image description here

Обратите внимание, что если вы пересобираете ветвь C1 вверху вверх/вверх, ваш существующий запрос на выгрузку будет автоматически обновляться!

См. также Как выполнить запрос на перенос Github?".


пользователь user10 добавляет в комментарии:

Я совершил C1 у своего хозяина и дал запрос на тягу.
Я сделал изменения C2 и не знаю, где взять и как передать запрос на тягу без добавления C1.
Это моя проблема.

Итак, у вас есть:

y--y--y--y  (origin/master)
\
 x--C1--C2  (master)

Во-первых, не делайте никаких изменений в верхней части origin/master, что приведет к обновлению вашего существующего запроса на pull (но на этот раз с C1 и C2 из вашего rebased master, поскольку я упомяните в моих советах по поиску запроса, во второй точке)

Убедитесь, что C2 находится в собственной ветке:

git checkout master
git branch bC2
git reset --hard master C2~
git tag C2base master

Если C2 состоит из нескольких последовательных коммитов, замените C2~ на первое совершение серии C2, за которым следует "~".
Предположим, что C2 совершает следующее C1 совершает.

Убедитесь, что у вас нет какой-либо работы (не зафиксировано): "reset --hard" удалит их.

Обратите внимание, что тег C2base ссылается на фиксацию непосредственно перед C2. Нам это нужно ниже.

y--y--y--y   (origin/master)
\
 x--C1       (master)
    ^ \
    |  --C2  (bC2)
 (C2base)

Тогда a git pull --rebase origin воспроизведет ваш мастер сверху origin/master.

y--y--y--y          (origin/master)
\         \
 |         x'--C1'  (master)
 |
 x--C1    
    ^ \
    |  --C2  (bC2)
 (C2base)

Обратите внимание, как C1 дублируется здесь и по-прежнему ссылается через ветвь bC2.

Наконец, убедитесь, что ваша ветка bC2 выполнена поверх origin/master имеет хорошие результаты:

git rebase --onto origin/master C2~ bC2
git tag -d baseC2

Что дает вам:

           C2'      (bC2)
          /
y--y--y--y          (origin/master)
          \
           x'--C1'  (master)

(Старый C1 commit больше не ссылается ни на что, поэтому он исчезает в reflog, который можно использовать to вернуть неверную rebase, например)

И теперь вы можете выполнить запрос на вытягивание из ветки bC2, которая содержит только C2 commits!

Ответ 2

перед каждым PR вы должны быть в курсе ведущей ветки. это означает, что порядок PR не является значимым для вас. наконец, мастер-ветвь (и возможная новая вилка) будет содержать все изменения.