2012-03-20 2 views
448

Итак, я сначала разветвил репо, а затем совершил сделку с этим разветвленным репо. Затем я открыл запрос на перенос. В запросе на вытягивание перечислены все изменения, которые я хотел.Как обновить запрос на извлечение из разветвленного репо?

После рассмотрения моего запроса на тягу произошел ряд изменений, которые владелец репо хотел, чтобы я сделал, прежде чем он принял его. Я сделал эти изменения в своей вилке, теперь как мне обновить запрос на перенос с этими изменениями (или это не то, как я должен его обработать)?

+5

возможно дубликат [Preferred Github процесса обновления запроса тянуть после проверки кода] (HTTP: // stackoverflow.com/questions/7947322/preferred-github-workflow-for-updating-a-pull-request-after-code-review) –

+4

@PaulDraper Я не согласен, что пользователь уже знает и представляет различные методы обновления запроса на pull, и спросите, что лучше. Я, с другой стороны, не знал о каких-либо методах и спрашивал о их существовании. Как показывает популярность этого вопроса, это имеет место для многих других пользователей. – stevebot

+5

Я думаю, что популярность объясняется тем, что (1) это действительно хороший, общий вопрос и (2) некоторые пользователи оказались здесь, а не там. Если бы он был первоначально идентифицирован как дубликат, они бы нашли другой вопрос одинаковым и ответили на их вопрос. –

ответ

444

Вы сделали это правильно. Запрос на перенос будет автоматически обновляться. Процесс:

  1. Открытого запрос тянуть
  2. Фиксировать изменения, основанные на обратной связи в местном репо
  3. Нажмите для соответствующей отрасли вилки

запроса тянуть автоматически добавит новый (это уже есть, прокрутите вниз!)

+48

приятно! Я проверял везде, но фактический запрос на тягу. его магия, черная магия, я не стану подвергать сомнению ее. – stevebot

+44

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

+0

Каким-то образом изменения не отражаются в этом запросе на растяжение так, как должны. Фактическая ветвь - две коммиты впереди запроса на растяжение. https://github.com/akshay2000/XBMCRemoteRT/pull/17/ – akshay2000

26

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

2

При использовании GitHub on Windows:

  1. Внесите изменения локально.
  2. Открыть GitHub, переключиться на локальные хранилища, дважды щелкнуть репозиторий.
  3. Переключите ветку (около верхней части окна) на ветку, из которой вы создали запрос на вытягивание (т. Е. Ветвь на стороне вилки сравнения).
  4. Должен видеть, как ввести комментарий комментировать справа и внести изменения в ваше местное репо.
  5. Нажмите «Синхронизировать сверху», что, среди прочего, подталкивает вашу фиксацию из локальной к вашей дистанционной вилке на GitHub.
  6. Запрос на перенос будет автоматически обновляться с помощью дополнительных коммитов. Это связано с тем, что вытащенный запрос представляет собой разницу с веткой вашего вилка. Если вы перейдете на страницу запроса на вытягивание (тот, где вы и другие пользователи можете прокомментировать ваш запрос на перенос), на вкладке «Коммиты» должны быть ваши дополнительные фиксации.

Именно поэтому, прежде чем приступать к собственным изменениям, вы должны создать ветвь для каждого набора изменений, которые вы планируете вставить в запрос на вытягивание. Таким образом, как только вы сделаете запрос на вытягивание, вы сможете сделать еще одну ветку и продолжить работу над некоторыми другими задачами/функциями/исправлениями без влияния на предыдущий запрос на pull.

63

Обновление запроса тянуть в GitHub так же легко, как совершение разыскиваемых изменений в существующую ветвь (который был использован с запросом тянуть), но часто он также хотел, чтобы пережать изменения в одну фиксацию:

git checkout yourbranch 
git rebase -i origin/master 

# Edit command names accordingly 
    pick 1fc6c95 My pull request 
    squash 6b2481b Hack hack - will be discarded 
    squash dd1475d Also discarded 

git push -f origin yourbranch 

... и теперь запрос на pull содержит только одно сообщение.


Ссылка по теме о перебазировании:

+2

Upvote для упоминания rebase. Он помогает вырезать шум в истории изменений. – stevebot

+0

+11 (да, я намеревался использовать rrrrepeating для ключей. Использование git rebase/pick/squash отлично работает. – javadba

+7

Недостатком этого подхода является то, что вы удаляете предыдущий коммит. Это означает, что если в комментариях запроса на растяжение они будут потеряно и исчезает вместе с исходным фиксатором. – blowekamp

9

Я сделал это, используя следующие шаги:

  1. git reset --hard <commit key of the pull request>
  2. ли мои изменения в код, который я хотел сделать
  3. git add
  4. git commit --amend
  5. git push -f origin <name of the remote branch of pull request>
+1

Очень хорошо, я предпочитаю такой подход! GitHub даже скрывает (но сохраняет) устаревшие разделы кода и связанные с ним комментарии. Хорошо помнить, что если запрос pull содержит несколько коммитов, а тот, который требует фиксации, не находится на кончике ветки, «git reset -hard» отменит все изменения, внесенные после указанного идентификатора. У меня была резервная копия, которую я применил вручную. Не очень удобно, если есть более чем одна дополнительная фиксация, хотя ... – Nagev

Смежные вопросы