Я открыл запрос на перенос для репозитория rails на github с помощью кнопки Fork & Edit this file file.
Теперь, после получения отзывов о моем PR, я хотел добавить еще несколько коммитов. Итак, вот чем я закончил
$ git clone git@github.com:gaurish/rails.git #my forked repo
$ git rebase -i 785a2e5 #commit hash of my commit using which PR was opened
$ git checkout patch-3 #branch name I had to send my commits under to be shown in that PR
$ git commit -am "Changes done as per feedback"
$ git push origin patch-3
Это сработало нормально, но кажется довольно сложным рабочим процессом. Может я что-то не так тут не так?
у меня вопрос: правильно ли я это делаю? если нет, то как правильно это сделать?
git
github
pull-request
CuriousMind
источник
источник
Ответы:
Поскольку вы используете инструменты GitHub и просто изменяете один файл, вы также можете перейти к файлу на GitHub, выбрать нужную ветку в верхнем левом углу под раскрывающимся списком «tree:» (
patch-3
в вашем случае) и теперь выбрать «Изменить» этот файл". Теперь ваши изменения будут зафиксированы в этой ветке и будут отображаться в вашем запросе на перенос.источник
Я недавно писал на эту тему в блоге :
Как мы будем обновлять эту функциональную ветку? Слияние новейших коммитов восходящего потока легко, но вы хотите избежать создания коммитов слияния, так как это не будет оценено при передаче в восходящий поток: тогда вы эффективно повторно фиксируете изменения восходящего потока, и эти коммиты восходящего потока получат новый хэш ( когда у них появляется новый родитель). Это особенно важно, поскольку эти объединенные коммиты будут отражены в вашем запросе на перенос на GitHub, когда вы отправите эти обновления в свою личную ветку функций GitHub (даже если вы сделаете это после того, как отправили запрос на перенос).
Вот почему нам нужно перебазировать вместо слияния:
И опция rebase, и команда rebase в git сохранят ваше дерево в чистоте и позволят избежать коммитов слияния. Но имейте в виду, что это ваши первые коммиты (с которыми вы выпустили свой первый запрос на перенос), которые перебазируются, и у которых теперь есть новый хэш фиксации, который отличается от исходных хэшей, которые все еще находятся в вашей удаленной ветке репозитория github. .
Теперь отправка этих обновлений в вашу личную функциональную ветку GitHub не удастся, поскольку обе ветви различаются: локальное дерево ветки и дерево удаленной ветки «не синхронизированы» из-за этих разных хэшей фиксации. Git скажет вам сначала
git pull --rebase
, а затем нажмите еще раз, но это не будет простой перемоткой вперед, поскольку ваша история была переписана. Не делай этого!Проблема здесь в том, что вы снова получите свои первые измененные коммиты в том виде, в каком они были изначально, и они будут объединены поверх вашей локальной ветки. Из-за состояния рассинхронизации это извлечение не применяется чисто. Вы получите неработающую историю, в которой ваши коммиты появляются два раза. Когда вы отправляете все это в свою ветку функций GitHub, эти изменения будут отражены в исходном запросе на перенос, который станет очень и очень некрасивым.
AFAIK, на самом деле нет абсолютно чистого решения для этого. Лучшее решение, которое я нашел, - заставить вашу локальную ветку переместиться в ветку GitHub (на самом деле принудительное обновление без быстрой перемотки вперед):
Согласно git-push (1):
Так что не тяните, просто нажимайте с силой, вот так:
или:
Это фактически просто перезапишет вашу удаленную ветку всем, что находится в вашей локальной ветке. Коммиты, которые находятся в удаленном потоке (и вызвали сбой), останутся там, но будут зависшими коммитами, которые в конечном итоге будут удалены с помощью git-gc (1). Ничего страшного.
Как я уже сказал, это самое чистое решение AFAICS. Обратной стороной этого является то, что ваш PR будет обновляться с учетом этих новейших коммитов, которые будут иметь более позднюю дату и могут отображаться не синхронизированно в истории комментариев PR. Нет большой проблемы, но это может сбивать с толку.
источник
Вы также можете создать новый запрос на перенос, который привязан к
master
конкретнойabc1234
версии.Таким образом, любая новая фиксация / отправка в ваш репозиторий будет добавлена в запрос на перенос.
источник
Да, ты делаешь намного больше, чем нужно. Просто сделайте дополнительную фиксацию, а затем принудительно нажмите ее. Вы увидите исходную фиксацию, а также только что отправленную, когда обновите github в своем браузере.
источник