Отправить запрос тянуть на GitHub только для последнего коммита


Я разветвил проект на github и успешно вносил изменения в свой локальный Мастер и нажимал на origin на github. Я хочу отправить запрос на вытягивание, но хочу включить только последний коммит. Пользовательский интерфейс запроса на вытягивание github.com показывает последние 9 коммитов, и я не знаю, как отфильтровать это.

Я пытался понять, должен ли я создать новую локальную ветку, проверить это и каким-то образом сбросить или перебазировать вверх по течению? Затем примените мою последнюю фиксацию от моего мастера по идентификатору к новый локальный филиал и использовать его для запроса на вытягивание?

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

6 250

6 ответов:

вам нужно в основном создать новую ветку & cherry-pick коммитов, которые вы хотите добавить к нему.

Примечание: вам может понадобиться это перед проверкой / cherry-pick команды

git remote add upstream <git repository>

git remote update

git checkout -b <new-branch-name> upstream/master

git cherry-pick <SHA hash of commit>

git push origin <new-branch-name>

потом вы увидите <new-branch-name> ответвление на github, переключитесь на него и можете отправить запрос на вытягивание с изменениями, которые вы хотите.

создайте новую ветку, начиная с последней фиксации, которая также находится в репозитории origin:

git branch new-branch origin/master
git checkout new-branch

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

git cherry-pick feature

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

на втором этапе, теперь вам нужно решить, что делать с вашим feature филиала. Если вы еще не опубликовали свои изменения в этой ветке, лучшей процедурой, вероятно, является перебазирование этой ветви на new-branch (и удаление последней фиксации, если это не делается автоматически git rebase).

Я оказался в ситуации, когда я раздвоил вилку и хотел отправить запрос на вытягивание обратно в исходный проект.

Я:

  • orignal_project
  • forked_project (создан из исходного проекта на SHA: 9685770)
  • my_fork (создан из разветвленного проекта на SHA: 207e29b)
  • фиксация в моей вилке (SHA: b67627b), которую я хотел отправить обратно в исходный проект

для этого, Я:

  1. создал новую ветку из SHA, где исходный проект был разветвлен
  2. вытащил все из оригинального проекта
  3. черри выбрал фиксацию, которую я хотел отправить в качестве запроса на вытягивание
  4. толкнул все это до github

команды git были что-то вроде:

  1. git branch my-feature-request 9685770
  2. git checkout my-feature-request
  3. git pull https://github.com/original_project/original_project.git
  4. git cherry-pick b67627b
  5. git push origin my-feature-request

затем я выбрал my-feature-request в качестве ветви для моего запроса на вытягивание в исходный проект.

Это почти сработало для меня:

git checkout -b upstream upstream/master

git cherry-pick <SHA hash of commit>

git push origin upstream

разница была только в следующем:

git push origin upstream:upstream

мне нужно было изменить эту последнюю строку, чтобы git push сделал восходящую ветвь в моем репозитории GitHub, чтобы я мог сделать PR из нее.

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

поэтому я проверил новую ветку

git checkout -b isolated-pull

и вот здесь мое решение отличается от @Кевин Hakanson по, так как мне нужно сбросить эту ветку на то место в истории, которое я хочу отличить от

git reset --hard [sha-to-diff-by]

и cherry-выберите фиксацию, из которой я хочу создать изолированный запрос pull

git cherry-pick [my-isolated-commit-sha]

наконец, нажмите его до пульта дистанционного управления

git push origin isolated-pull

и вытяните запрос dat shi.

решение создать новую (временную) ветку, cherry-pick и создать запрос pull для этой ветви не удовлетворило меня. Я не хотел менять свой репозиторий, чтобы сделать набор коммитов доступным, поэтому я придумал следующую альтернативу:

сначала создайте файлы исправлений для всех коммитов, представляющих интерес:

git format-patch -1 <sha>

если фиксация интереса окажется последней, которую вы можете использовать HEAD вместо <sha>.

теперь, вы можете отправить патчи сопровождающий исходного репозитория, который может их применить:

git branch new-branch <master or some older commit where the fork diverged>
git checkout new-branch

git am < <the patch>
...

git checkout master
git merge new-branch

наконец, это должно выглядеть так же, как если бы временная ветвь была объединена запросом pull, но без наличия этой дополнительной ветви в Fork-репозитории.