Мой запрос на перенос был объединен, что делать дальше?

112

Недавно я участвовал в проекте от GitHub. Я сделал следующее:

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

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

Что я должен делать дальше? Стоит ли удалять ветку? Слить ветку? Что-нибудь еще?


Дополнительная информация:

Исходный проект имеет единственную ветку.

У меня также есть апстрим, чтобы получать последние обновления из исходного репо. (У меня так получилось) :

git remote add upstream https://path/to/original/repo.git

И я получаю такие обновления:

git fetch upstream
Сантош Кумар
источник
12
Гехе, вы не единственный, кто борется: видео на Youtube :)
Энн

Ответы:

65

Что делать дальше: продолжать добавлять новые функции или исправлять другие ошибки в их собственных выделенных ветках (помещенных только в вашу вилку).

Это означает, что ваша вилка остается, но ветви внутри вашей вилки могут приходить и уходить.

Вы также можете удалить вилку, если не планируете вносить дальнейший вклад, но она удалит соответствующую запись в «Репозитории, в которые вы вносите вклад» .

Легче:

  • удалите свою fixветку (фактически, теперь она удалена для вас ) на вилке (и в локальном клонированном репозитории: см. « Удаление ветки Git как локально, так и удаленно »)
  • git pull upstream master(если это masterбыла ветка, в которую было интегрировано ваше исправление: слияние будет происходить с перемоткой вперед): на этом этапе перебазирование не требуется.
  • воссоздайте ветку с исправлениями поверх обновленного локального файла master(теперь с последним от upstream master).

Однако никогда не забывайте один шаг перед отправкой любого будущего запроса на перенос:

сначала переустановите текущую ветку ( fix) из ветки назначения восходящего потока

( upstreamэто исходное репо, которое вы разветвили: см. «В чем разница между origin и upstream в github »)

Прежде чем отправлять что-либо обратно в исходное репо («восходящий поток»), вам необходимо убедиться, что ваша работа основана на последнем из указанного исходного репо (или запрос на вытягивание не приведет к слиянию с ускоренной перемоткой после применения обратно на upstreamрепо).
См., Например, « Рабочий процесс для управления запросами на вытягивание в общих репозиториях в github ».

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


OP Сантош Кумар спрашивает в комментариях :

Я вытащил и слил от upstreamмастера, что теперь?

Если вы не вносили никаких новых исправлений с момента последнего запроса на перенос, см. Выше (удалите и воссоздайте новую ветку fixповерх обновленного master).

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

git pull --rebase upstream master

Таким образом, вся моя новая локальная работа воспроизводится поверх самых последних upstream masterкоммитов (полученных в моем локальном репо), предполагая, что masterэто целевая ветка, которая будет интегрировать мой будущий запрос на перенос.

Затем я могу перенести свою локальную работу на ' origin', который является моей вилкой на GitHub upstream.
И из моей вилки на GitHub я могу безопасно сделать запрос на перенос, зная, что он будет добавлять только новые коммиты upstreamбез необходимости какого-либо разрешения слияния: слияние этих новых коммитов в upstreamрепо будет означать простое слияние с быстрой перемоткой вперед.


A git pull --rebaseбез указания ветки, поверх которой вы хотите перебазировать свою (в настоящее время проверенную) fixветку, не будет работать:

Это ( git pull --rebase) говорит:

You asked to pull from the remote '`upstream`', but did not specify a branch. 

Должен ли я наконец добавить мастер? И что это будет делать? Удалит ли мою fixветку?

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

VonC
источник
Можете ли вы объяснить перебазирование из восходящей части?
Сантош Кумар
@SantoshKumar, вам необходимо перебазировать локальные коммиты поверх исходного репо (здесь упоминается как восходящий поток), прежде чем нажимать на вилку и делать запрос на вытягивание: см. Stackoverflow.com/questions/9257533/…
VonC
Да, я знаю, что задаю простой вопрос. Я вытащил и слил из восходящего потока в главный, что теперь?
Сантош Кумар
@SantoshKumar, это хороший вопрос. Я отредактировал ответ, чтобы решить эту проблему. Ищите «ОП Сантош Кумар спрашивает в комментариях: ...»
VonC
Это говорит: You asked to pull from the remote 'upstream', but did not specify a branch.я должен masterнаконец добавить ? И что это будет делать? Удалит ли моя ветка с исправлениями ?
Сантош Кумар
18

Во-первых, поздравляю с вашим первым вкладом в проект на Github.

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

Philipp
источник